Я пытаюсь разработать автономное приложение Java, использующее JPA (Hibernate 4.3).
Это обеспечивает доступ к базе данных zos DB2 v10.
У двух моих объектов есть сопоставление @OneToOne, которое я хочу LAZY загрузить.
У меня проблема в том, что в родительской таблице есть строки, которых нет в дочерней таблице.
Я использую
@OneToOne(optional = false, fetch = FetchType.LAZY)
Что отлично работает, когда значение столбца соединения существует в обеих таблицах, однако мои данные несовместимы, и я имею случаи, когда значения существуют только в родительской таблице.
я пытался добавить
@NotFound(action=NotFoundAction.IGNORE)
Для моего сопоставления @OneToOne безрезультатно.
Возможно ли LAZY LOAD @OneToOne отношения, где не всегда есть строка в каждой таблице?
У моих двух объектов есть эти аннотации для сопоставления OneToOne
@Entity
@Table(name = "TABLE0001")
@BatchSize(size = 100)
public class Table_0001 {
/**
* Related Table
*/
@OneToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "PTY_ID")
@BatchSize(size = 100)
private Table_0002 table0002;
public Table_0002 getTable0002() {
return table0002;
}
public void setTable0002(final Table_0002 table0002) {
this.table0002 = table0002;
}
}
@Entity
@Table(name = "TABLE0002")
@BatchSize(size = 100)
public class Table_0002 {
}
Мне нужна LAZY загрузка между этими двумя объектами.
Я получаю список Table_0001, а затем хочу получить Table_0002 партиями по 100. Все это будет работать с показанными аннотациями, ЕСЛИ в Table_0001 не существует идентификаторов, которых нет в Table_0002.
Это код Java, который я использую для получения списка Table_0001.
private static Collection<? extends Table_0001> getAllModelsIterable(final String filter, final int offset, final int max) {
final CriteriaBuilder criteriaBuilder = PersistenceManager.INSTANCE.getCriteriaBuilder();
final CriteriaQuery<Table_0001> criteriaQuery = criteriaBuilder.createQuery(Table_0001.class);
Root<Table_0001> personRoot = criteriaQuery.from(Table_0001.class);
criteriaQuery.select(personRoot);
criteriaQuery.where(criteriaBuilder.like(personRoot.get(Table_0001_.filter), filter));
criteriaQuery.orderBy(criteriaBuilder.asc(personRoot.get("id")));
final TypedQuery<Table_0001> typedQuery = entityManager.createQuery(criteriaQuery);
typedQuery.setFirstResult(offset);
typedQuery.setMaxResults(max);
return typedQuery.getResultList();
}