2012-11-30 4 views
0

У меня есть следующие объекты:Ленивой загрузка ассоциация не инициализирует ребенок ассоциации

@Entity 
public class Foo { 
    @ManyToOne(optional = false) // I've tried @OneToOne also, same result 
    @JoinColumn(name = "bar_id") 
    private Bar bar; 

    // this is a business key, though not mapped as unique for legacy reasons 
    @Column(nullable = false) 
    private long fooNo; 

    // getters/setters + other properties 
} 

@Entity 
public class Bar { 
    @OneToOne(optional = true, mappedBy = "bar", cascade = CascadeType.ALL) 
    private Foo foo; 

    // getters/setters + other properties 
} 

Примечание: Это правильное отображение: @ManyToOne и @OneToOne (он не был разработан мной) , Я попытался @OneToOne с обеих сторон также, с тем же результатом.

В принципе, я могу иметь панель без объекта Foo, но каждый раз, когда у меня есть Foo, там должен быть связанный с ним бар. Foo считается родительским объектом (именно поэтому его владелец ассоциации), но Bar в отдельных случаях может стоять в одиночестве.

Я тогда загрузить Foo объект так:

SELECT f FROM Foo f WHERE f.fooNo = :fooNo 

foo.getBar() правильно выбирает соответствующий Bar, как и ожидалось. Однако foo.getBar().getFoo() - null. Похоже, что другая сторона этого отношения неправильно инициализируется JPA/спящим режимом. Любые идеи, почему это происходит и как я могу это исправить?

Я использую Hibernate 3.2.1 в качестве моей реализации JPA, которую мы используем через EJB3 beans (хотя это, вероятно, не имеет значения).

+0

Вы попробовали 'fetch = FetchType.LAZY'? – durron597

+0

Вы хотите положить это на ссылку 'Foo'? Я думал, что это был дефолт, когда он не указан? –

+0

Не могли бы вы объяснить, как эти объекты должны быть связаны, поскольку текущее сопоставление запутывает. –

ответ

0

Вы уверены, что вы связались? ManyToOne обычно подразумевает oneToMany на другом.

+0

Возможно, это был комментарий, а не комментарий Ответ: Да, это текущее сопоставление (оно не создано мной). Я попытался @OneToOne с обеих сторон (потому что это логично, что это такое), но это ничего не меняет. –

+0

Вы также можете t ry manyToOne с обеих сторон –

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