如何使用Unique键而不是Primary Key在Hibernate中检索记录

时间:2012-09-04 07:19:33

标签: hibernate key unique

使用session.load()session.get()org.hibernate.session的任何其他方法,是否可以根据Unique列而不是PK列值获取休眠记录?

我的要求是我需要根据唯一列值获取记录,而不是主键。

就像我不想使用Criteria API。我需要使用session.get或加载一些方法。你提到的答案是进行搜索。但我要求根据唯一键获取单个记录。比如说。我的类Fruit有一个PK列ID和一个唯一的列fruitID,它是唯一的键。我想根据fruitID而不是ID检索唯一记录。例如。 Fruit fruit =(Fruit)session.get(Fruit.class,fruitID);这里fruitID是Fruit class的唯一专栏。

2 个答案:

答案 0 :(得分:8)

你的意思是这样的吗?

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

检查hibernate manual以获取有关条件的更多信息

答案 1 :(得分: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;

    ...
}