У меня есть 2 класса в отношении «один ко многим» и запрос JPQL, который теперь работает, как я ожидал. Даже после прочтения некоторого поста об этом мне не кажется понятным.
@Entity
@Table(name = "context_entity")
public class ContextEntity {
@Id
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY)
@JoinColumn(name = "entity_id")
private List<TypeSpecCharacteristicValue> metadata = null;
}
@Entity
@Table(name = "type_spec_characteristic_value")
public class TypeSpecCharacteristicValue {
@Id
private Long id;
private String value;
}
Кстати Я вырезал только важную часть своего кода.
Если я запускаю следующий запрос, я получаю дубликаты объектов TypeSpecCharacteristicValue:
session.createQuery("select e.metadata from ContextEntity e left join e.metadata where e.id=:contextId")
Затем я проверяю оператор SQL, сгенерированный hibernate, что привело к следующему:
select metadata2_.id as id1_5_, metadata2_.value as value3_5_ from context_entity contextent0_ left outer join type_spec_characteristic_value metadata1_ on contextent0_.id=metadata1_.entity_id inner join type_spec_characteristic_value metadata2_ on contextent0_.id=metadata2_.entity_id where contextent0_.id=[some_context_id];
Почему hibernate генерирует второе соединение с таблицей type_spec characteristic_value
? Должен ли я использовать различные?
Заранее спасибо.