У меня есть отношения двунаправленной @OneToMany/@ManyToOne в нижеследующих лиц:org.hibernate.AssertionFailure: нулевой идентификатор в Hibernate @OneToMany отношений
@Entity
public class Item implements java.io.Serializable {
// other columns including ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long itemId;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "packageId")
private Package package;
}
@Entity
public class Package {
// other columns including ID
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(fetch = FetchType.EAGER, mappedBy="package", cascade = CascadeType.ALL)
private Set<Item> items = new HashSet<Item>(0);
}
Предположим сначала, что есть пакет без предметов и добавлять элементы к этому пакету, когда я пытаюсь получить пакет по его идентификатору packageRepository.findOne(packageId)
(код JPA Spring Data), я получаю следующую ошибку в этой строке.
org.hibernate.AssertionFailure: null identifier
at org.hibernate.engine.spi.EntityKey.<init>(EntityKey.java:69)
at org.hibernate.internal.AbstractSessionImpl.generateEntityKey(AbstractSessionImpl.java:247)
at org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:794)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:707)
Я думаю, что Hibernate пытается левая внешним соединением и обнаруживает, что Itemid (Id для Item
лиц) является недействительным. Мне нужно получить EAGER. Каков обходной путь для этой проблемы? Как получить пакет, когда нет элементов?
Не могли бы вы опубликовать поля ID в классах? –
Я предполагаю, что либо неправильное сопоставление идентификатора, либо наличие в базе данных нулевого идентификатора. Чтобы узнать, что такое SQL-запрос, включите SQL-журнал и посмотрите сами. –
@JBNizet Добавлены поля идентификаторов. Во время извлечения пакета нет элементов в таблице. Таким образом, левое внешнее соединение пакета с элементом (из журнала SQL) приводит к null 'itemId'. – Swapnil