使用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的唯一专栏。
答案 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;
...
}