#java #hibernate #orm #criteria #hibernate-criteria
#java #спящий режим #orm #критерии #режим гибернации-критерии
Вопрос:
Предположим, у нас есть объект A, который содержит список объектов с типом B (с отложенной инициализацией). Объект B имеет одно поле BLOB и некоторые другие, которые не содержат много данных.
Как я могу, используя запрос критериев гибернации, получить объект A с его полями и каждый объект A со списком Bs, но каждый объект B без поля BLOB?
Кроме того, я не хочу извлекать As и повторять их, чтобы получить Bs. (Теперь я расскажу, как использовать «Проекции» для извлечения только Bs с обязательными полями).
Вот пример кода:
A-сущность:
@Entity
@Table(name = "A")
public class A implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@OneToMany(mappedBy = "order", fetch = FetchType.LAZY)
@Cascade(CascadeType.ALL)
private List<B> list = new LinkedList<>();
}
B-сущность:
@Entity
@Table(name = "B")
public class B implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "data", nullable = false)
@Lob
private byte[] data;
@ManyToOne(targetEntity = A.class, fetch = FetchType.EAGER)
@JoinColumn(name = "A_id", nullable = false)
private A a;
}
Комментарии:
1. пожалуйста, добавьте свой код и четко укажите данные
2. @SubbaramiReddy, готово. Вы можете помочь?
3. Для этой цели существуют проекции: либо вы полностью загружаете объект, либо выбираете какое-либо поле с помощью проекции. Если вы загружаете только какое-то поле, как hibernate узнает, какое поле сохранить / обновить? Используйте проекцию.
4. @jpprade Не могли бы вы написать какой-нибудь код, пожалуйста? Я знаю, как использовать пользовательские прогнозы, если я загружаю B напрямую, но здесь я загружаю A, так что это не очевидно.