加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hibernate:按列名设置字段

发布时间:2020-12-15 04:13:31 所属栏目:Java 来源:网络整理
导读:有没有办法在实体中设置一些只包含字段列名称信息的字段? 例如: @Entity@Table(name = "T_PERSON")public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = "p_id") private int id; @Column(name = "p_name") private
有没有办法在实体中设置一些只包含字段列名称信息的字段?

例如:

@Entity
@Table(name = "T_PERSON")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "p_id")
    private int id;

    @Column(name = "p_name")
    private String name;

    // getters and setters for id and name
}

所以我将p_name和T_PERSON作为输入,我想在其中设置一些值.

我发现this和this使用列名来获取字段名称,我可以使用Reflection来获取setter方法,但是有没有替代反射?

解决方法

我认为你最好的选择只是使用反射. Hibernate内部也使用反射来读取通过注释完成的所有映射.如果你想试试hibernate内部类,那么看一下Hibernate的SessionFactory实现类(org.hibernate.impl.SessionFactoryImpl),它为每个实体保存包含类元数据(org.hibernate.metadata.ClassMetadata)的map.您必须在代码中引用单例SessionFactory.

你可以用它来获取ClassMeta数据

public ClassMetadata getClassMetadata(Class persistentClass) throws HibernateException

ClassMetaData中有一些方法可能对你有用.例如,

public void setPropertyValue(Object object,String propertyName,Object value,EntityMode entityMode) throws HibernateException;

EntityMode可以指定为EntityMode.POJO

此外,如果您有用于初始化hibernate的Configuration对象的引用,则可以查询您感兴趣的表

public Table getTable(String schema,String catalog,String name) {
            String key = Table.qualify(catalog,schema,name);
            return tables.get(key);
        }

并且有方法来获取物理或逻辑列名称

public String getPhysicalColumnName(String logicalName,Table table) throws MappingException

public String getLogicalColumnName(String physicalName,Table table) throws MappingException

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读