10

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

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

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

4

2 回答 2

8

你的意思是这样的?

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

查看休眠手册以获取有关条件的更多信息

于 2012-09-04T07:25:15.153 回答
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;

    ...
}
于 2013-06-05T14:13:49.330 回答