不能使用DefaultComponentSafeNamingStrategy
與Hibernate 5,因爲它是由Hibernate老NamingStrategy
接口的實現4.
正如你可能知道,休眠5使用了兩個新接口ImplicitNamingStrategy
和PhysicalNamingStrategy
。
您可以使用這種隱式命名策略: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
我使用的標註@column和使用該org.hibernate.boot。 model.naming.ImplicitNamingStrategyComponentPathImpl並且不起作用,但是在刪除它的註釋之後。 – Elhamo
@Elhamo我用Hibernate SessionFactory檢查了這個,而不是用PersistentContext。這可能是一個原因,但我不確定。你可能會錯過一些東西。 –