如何利用独特的密钥,而不是主键检索记录在Hibernate中(How to retrieve rec

2019-06-27 18:42发布

使用session.load()session.get()或任何其他方法org.hibernate.session ,是有可能得到基于独特的列,而不是PK列值处于休眠的纪录?

我的要求是,我需要得到基于独特的列值的记录,而不是主键。

它就像我不希望使用的标准API。 我需要使用session.get或负载样的方法。 你提到的答案是做搜索。 但我要求得到基于唯一键的单个记录。 说的如。 我的类水果有一个PK列ID和唯一列fruitID这是唯一的关键。 我想要检索基础上,fruitID而不是ID的唯一记录。 例如。 果果=(水果)session.get(Fruit.class,fruitID); 这里fruitID是水果类的唯一列。

Answer 1:

你的意思是这样的吗?

Criteria criteria = session.createCriteria(User.class);  
criteria.add( Restrictions.eqProperty("uniqueField", "value") )
List results = criteria.list();
Object myObj = results.get(0);

检查休眠手册有关标准的详细信息



Answer 2:

你可能会使用一个现有的表,你只需要查找的行,也许做简单的修改有所帮助,如果你不需要的主键

移动@Id注释以独特的关键领域,离开了主键或使其正常列

这一点,问题就出现会更复杂的操作,但是你可以定义一个第二实体的工作,如果你只是做查询或编辑该表只是做了查找,如果以后需要通过主键来执行主键操作重新查找

@Entity 
class RealEntity implements Serializable {
    @Id
    private int id;

    @Column(...)
    private String uniqueSecondKey;

    ...
}


@Entity
class LookupEntity implements Serializable {
    @Column()
    private int id;

    @Id
    @Column(...)
    private String uniqueSecondKey;

    ...
}


文章来源: How to retrieve record in Hibernate using Unique key instead of Primary Key