У меня есть следующие объекты:Ленивой загрузка ассоциация не инициализирует ребенок ассоциации
@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 (хотя это, вероятно, не имеет значения).
Вы попробовали 'fetch = FetchType.LAZY'? – durron597
Вы хотите положить это на ссылку 'Foo'? Я думал, что это был дефолт, когда он не указан? –
Не могли бы вы объяснить, как эти объекты должны быть связаны, поскольку текущее сопоставление запутывает. –