Как получить запись в спящем режиме с использованием уникального ключа вместо первичного ключа
Используя 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;
...
}