2014-01-03 1 views
0

У меня есть две сущности, скажемJPA OneToMany вставка не устанавливая идентификаторами правильно

Person.java:

@Entity 
public class Person implements Serializable { 

@Id 
@GeneratedValue(strategy = AUTO) 
private long id; 

@OneToMany(mappedBy = "personData", cascade = CascadeType.PERSIST) 
private List<SkillsData> skillsData; 
... 
} 

SkillsData.java

@Entity 
@Table(name = "SkillsData") 
public class SkillsData implements Serializable { 
@Id 
@GeneratedValue(strategy = AUTO) 
private long id; 
@JoinColumn(name = "PERSONID") 
@ManyToOne(cascade = REMOVE) 
private Person personData; 
... 
} 

Когда я создаю человека, добавьте список типа SkillsData в его поле skillsData и сохраняйте его, все работает без каких-либо исключений, но когда я просматриваю базу данных непосредственно в таблице SkillsData, поле PERSONID не заполняется, а beca использование того, что добавленные навыки не могут быть привязаны к правильному человеку. Я пытаюсь исправить эту проблему в течение некоторого времени, и я буду благодарен за любую помощь.

+0

Это поможет, если вы упомянули используемую СУБД и как выглядит оператор создания таблицы. – Gimby

+0

Это может быть опечатка, или, может быть, я просто очень ржавый на Entities, но ваша '@ JoinColumn' является« PERSONID », но похоже, что ваше имя столбца просто« id »в таблице« person » – CodeChimp

+0

@CodeChimp: Вы неправильно понимаете JoinColumn, он представляет столбец (внешний ключ) в SkillsData с именем PERSONID. – Gimby

ответ

0

Проблема может заключаться в том, что вы не устанавливаете SkillsData.personData, прежде чем продолжать оставлять его нулевым.

Вы должны установить его причиной добавления SkillsData в Person.skillsData списке не хватает, так как вы объявили эту сторону отношений, как обратной (атрибут mappedBy).

Поэтому обратная сторона SkillsData.personData не несет ответственности за установление этих отношений.