Как получить запись в спящем режиме с использованием уникального ключа вместо первичного ключа

Используя session.load() или session.get() или любой другой метод org.hibernate.session, возможно ли получить запись в спящем режиме на основе столбца Unique, а не значения столбца PK?

Мое требование состоит в том, что мне нужно получить записи на основе уникального значения столбца, а не первичного ключа.

Это похоже на то, что я не хочу использовать API критериев. Мне нужно использовать session.get или загружать методы. Ответ, о котором вы говорили, - это поиск. Но я прошу получить одну запись на основе уникального ключа. Скажем, например. У моего класса Fruit есть идентификатор столбца PK и уникальный идентификатор столбца, который является уникальным ключом. Я хочу получить уникальную запись на основе идентификатора fruitID, а не ID. например. Фруктовые фрукты = (Фрукты) session.get(Fruit.class, fruitID); здесь fruitID - уникальный столбец класса Fruit.

Ответ 1

Вы имеете в виду что-то вроде этого?

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

Обратитесь к руководству hibernate для получения дополнительной информации о критериях

Ответ 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;

    ...
}