2017-05-15 113 views
0

我有Hibernate 5.2.10版本和hibernate-jpa-2.1-api版本1.0.0.Final。我正在使用MairaDB作爲數據庫。在persistance.xml中,將屬性hibernate.ejb.naming_strategy設置爲DefaultComponentSafeNamingStrategy,但仍然收到相同的錯誤: 實體映射中的重複列。我不想使用@attributeoverrides休眠,我嘗試了不同的方法,但仍然是相同的錯誤。我想要兩個或更多的嵌入式實體。休眠兩次嵌入實體

感謝

回答

0

不能使用DefaultComponentSafeNamingStrategy與Hibernate 5,因爲它是由Hibernate老NamingStrategy接口的實現4.

正如你可能知道,休眠5使用了兩個新接口ImplicitNamingStrategyPhysicalNamingStrategy

您可以使用這種隱式命名策略:org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl。 您需要設置hibernate.implicit_naming_strategy屬性(而不是hibernate.ejb.naming_strategy)。

對於這些實體

@Embeddable 
public class AuthorInfo { 

    @Column 
    private String authorInfo; 

    @OneToOne 
    private Book bestBook; 

} 

@Entity 
public class Book { 

    @Id 
    private Long pid; 

    @Embedded 
    private AuthorInfo firstAuthor; 

    @Embedded 
    private AuthorInfo secondAuthor; 

} 

它創建了一個架構

create table Book (
     pid bigint not null, 
     firstAuthor_authorInfo varchar(255), 
     secondAuthor_authorInfo varchar(255), 
     firstAuthor_bestBook_pid bigint, 
     secondAuthor_bestBook_pid bigint, 
     primary key (pid) 
) 

單元測試,以檢查一個模式:TwoEmbeddedStrategyTest.java

+0

我使用的標註@column和使用該org.hibernate.boot。 model.naming.ImplicitNamingStrategyComponentPathImpl並且不起作用,但是在刪除它的註釋之後。 – Elhamo

+0

@Elhamo我用Hibernate SessionFactory檢查了這個,而不是用PersistentContext。這可能是一個原因,但我不確定。你可能會錯過一些東西。 –