Hibernate: получить только определенное поле для отношения ManyToOne (не вставлять полную сущность) - PullRequest
0 голосов
/ 28 сентября 2018

Возможно ли в Hibernate встраивать только одно свойство стороннего объекта в другой объект, а не полный объект?

Это моя проблема:

@Entity
@Table(name = "ELEM")
public class Element {

    @Id
    private long id;

    @Column(name = "CODE")
    private String code;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "FOLDR_ID", nullable = false)
    private Folder folder;
}   

@Table(name = "FOLDR")
public class Folder {

    @Id
    private long id;

    @Column(name = "LABEL")
    private String label;

    // dozens of other columns
    // ...
}

Это работает нормально,но теперь в элементе я хочу иметь только метку, а не полный объект папки.Примерно так:

@Entity
@Table(name = "ELEM")
public class Element {

    @Id
    private long id;

    @Column(name = "CODE")
    private String code;

    // HOW TO ANNOTATE THIS?
    private String folderLabel;
}

Зачем мне это?Потому что я думаю, что это должно быть более производительным.Создается меньше объектов и выбирается меньше столбцов.

Я пытался использовать @SecondaryTable, но узнал, что это работает только для однозначных ассоциаций, т. Е. Folder.id соответствует Element.id, чтодело тут не в этом.

Можно ли это как-то сделать в Hibernate, или полный инородный объект - единственный шанс?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Таким образом, вы можете определить собственный SQL-оператор и оператор соединения для него.

query = "выбрать идентификатор, код, метку из tbl_element join tbl_folder где tbl_element.folder_fk = tbl_folder.id"

если вы используете entitymanager , чтобы вы могли сделать что-то подобное

entitymanager.createNativeQuery (query, Element.class) .setParameter (..). GetResultListили getResult

public class Element { 

 private int id;
 private String code;
 private String folderlabel;

// getter setter

}
0 голосов
/ 28 сентября 2018

Вы можете использовать Hibernate ResultTransformer (например, AliasToBeanResultTransformer), чтобы вернуть пользовательский прогноз (POJO) на основе ваших потребностей.

Следующая ссылка должна помочь вам понять, что я имею в виду.

https://vladmihalcea.com/why-you-should-use-the-hibernate-resulttransformer-to-customize-result-set-mappings/

...