2011-12-22 4 views
2

Использование JPA У меня есть dataconfiguration, который добавляется в базу данных без каких-либо проблем:JPA не добавляет Id в базу данных из оберточной объекта

@Entity @Table(name = "dataConfigurations", uniqueConstraints = {@UniqueConstraint(columnNames = {"name"})}) 
    @NamedQueries({@NamedQuery(name = "DataConfigurations.names", query = "SELECT d.name FROM DataConfiguration d"), @NamedQuery(name = "DataConfiguration.findByName", query = "SELECT d FROM DataConfiguration d WHERE d.name = :name")}) 
    public class DataConfiguration implements Serializable 
    { 

     @Transient 
     private static final long serialVersionUID = 1L; 
     @Id //@GeneratedValue(strategy = GenerationType.) 
      //@TableGenerator(name = "dataConfigurationSequence", table = "Sequences", pkColumnName = "NameSequences", valueColumnName = "valueSequence", pkColumnValue = "dataConfigurationId") 
     private long id; 
     @OneToMany(mappedBy = "dataConfiguration", cascade = CascadeType.ALL) 
     private List<Content> contents; // "Data" is a reserved SQL word. 
     @ManyToMany(mappedBy = "dataConfigurations", cascade = CascadeType.ALL) 
     private List<LabelType> labelTypes; 
     private String name; 
     @OneToMany(mappedBy = "dataConfiguration", cascade = CascadeType.ALL 
     private List<Template> templates; 

Этот Dataconfiguration содержит список Contents (один-ко-многим) , другие отображения (шаблоны ан labelTypes не важно сейчас, но позже в моей программе, они, вероятно, дадут мне такую ​​же проблему, как у меня есть с содержанием)

@Entity @Table(name = "contents", uniqueConstraints = {@UniqueConstraint(columnNames = {"dataConfigurationId", "displayOrder"})}) 
    public class Content implements Serializable 
    { 
     @Transient 
     private static transient final long serialVersionUID = 1L; 
     @Id //@GeneratedValue(strategy = GenerationType.IDENTITY) 
      //@TableGenerator(name = "contentSequence", table = "Sequences", pkColumnName = "NameSequences", valueColumnName = "valueSequence", pkColumnValue = "contentId") 
     private long id; 
     private String content; // "Data" is a reserved word in traditional SQL. 
      @ManyToOne(optional = false, fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "dataConfigurationId") 
     private DataConfiguration dataConfiguration; 
     private int displayOrder; 
     private int editableFrom; 
     private String typeDiscriminator; 

Это метод управления, который инициирует метод сохранения:

public String saveDataConfiguration() 
{ 
    dataConfiguration = new DataConfiguration(getNextId(), dataConfigurationName, contents); 
    dataConfigurationFacade.create(dataConfiguration); 
    return null; 
} 

создать метод является частью AbstractFacade

public void create(T entity) 
{ 
    getEntityManager().persist(entity); 
     getEntityManager().flush(); 
} 

Когда я исполню все, кроме метода Идентификатор dataconfiguration в таблице контента сохраняется. (Внешний ключ данных не сохраняется в содержимом) Любые подсказки и/или советы очень полезны!

+0

Мне удалось избежать проблемы с помощью NativeQuery, но я все равно хотел бы знать, что пошло не так с кодом выше. –

ответ

1

Возможно, вы забыли инициализировать поле dataConfiguration каждого контента. Это тот, который сопоставляется столбцу join, и, таким образом, он проверяет, что Hibernate проверяет, существует ли связь между этими двумя объектами или нет.

Смежные вопросы