Как удалить некоторые поля ссылочной сущности из запроса критериев в режиме гибернации

#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, так что это не очевидно.