2015-10-20 6 views
1

У меня есть объект Topic, который должен соответствовать объекту Questionnaire на основе версии вопросника. Мне нужно использовать ленивую выборку.Lazy fetch для JPA @OneToOne или @ManyToOne Two Join Columns

Однако ленивый выбор не работает. При получении всех тем я вижу, что Hibernate также выполняет отдельные SQL-запросы для получения вопросника для каждой темы.

public class Topic { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", nullable = false) 
    @Access(AccessType.PROPERTY) 
    private long id; 

    @Column(name = "questionnaire_version") 
    private String questionVer; 

    @ManyToOne(optional = true, fetch = FetchType.LAZY) 
    @JoinColumns({ 
      @JoinColumn(name = "id", referencedColumnName = "topic_id", 
       insertable = false, updatable = false), 
      @JoinColumn(name = "questionnaire_version", referencedColumnName = "version", 
       insertable = false, updatable = false) 
     }) 
    @Access(AccessType.PROPERTY) 
    private Questionnaire questionnaire; 

Как получить ленивый выбор в этом случае? Мне нужно OneToOne здесь, и я попробовал как OneToOne, так и ManyToOne.

+0

Вы получили это решение? – Nils

ответ

0

Родитель: @OneToOne(optional = true, fetch = FetchType.LAZY, cascade = {CascadeType.ALL})

Ребенок: @ManyToOne(optional = true, fetch = FetchType.LAZY, cascade = {CascadeType.ALL})

Использование каскадных обе стороны. Вы можете использовать в судебном порядке ВСЕ в соответствии с вашим требованием.

+0

В моем требовании у меня есть отношение один к одному в родительском дочернем элементе. Я использую \ @OneToOne только в родительском и указанном \ @OneToOne Param в соответствии с вашим ответом, но он не работает. – Badman

Смежные вопросы