How to retrieve record in Hibernate using Unique k

2019-02-16 15:32发布

Using session.load() or session.get() or any other method of org.hibernate.session, is it possible to get a record in hibernate based on the Unique column rather than the PK column value?

My requirement is that I need to get the records based on the unique column value and not the primary key.

It is like I don want to use the Criteria API. I need to use the session.get or load kind of methods. The answer that you have mentioned is for doing a search. But I am asking for getting a single record based on the unique key. Say for eg. My class Fruit has a PK column ID and a unique column fruitID which is unique key. I want to retrieve a unique record based on the fruitID and not ID. eg. Fruit fruit = (Fruit) session.get(Fruit.class,fruitID); here fruitID is the unique column of Fruit class.

2条回答
趁早两清
2楼-- · 2019-02-16 16:05

You might find this helpful if using a existing table where you need only lookup the row, maybe do simple edits and you do not require the primary key

Move the @Id annotation to the unique key field and leave out the the primary key or make it a normal column

This work if your only doing lookups or editing that table, issue would arise will more complex operations, however you could define a second entity just to do the lookup and if you later need to do primary key operations re-lookup by primary key

@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;

    ...
}
查看更多
Root(大扎)
3楼-- · 2019-02-16 16:12

You mean something like this?

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

Check the hibernate manual for more info about criteria

查看更多
登录 后发表回答