[英]Automatically Add a Prefix to Column Names for @Embeddable Classes
我正在開發一個項目,我通過添加Hibernate注釋來持久保存一些POJO。 我Time_T
一個問題是像這樣的代碼失敗,因為Hibernate試圖將Time_T
的子字段Time_T
到同一列(即startTime.sec
和stopTime.sec
都試圖映射到colum sec
,導致錯誤)。
@Entity
public class ExampleClass
{
@Id
long eventId;
Time_T startTime;
Time_T stopTime;
}
@Embeddable
public class Time_T
{
int sec;
int nsec;
}
由於在整個系統中會出現這樣的情況,如果有一個選項可以自動為列名添加前綴(例如,使startTime_sec
, startTime_nsec
, stopTime_sec
, stopTime_nsec
),而不必應用覆蓋,那就太好了。在每個領域的基礎上。 Hibernate是否具備此功能,還是有其他合理的解決方法?
嘗試將屬性hibernate.ejb.naming_strategy
設置為org.hibernate.cfg.DefaultComponentSafeNamingStrategy
在我的情況下使用org.hibernate:hibernate-core:5.0.12.Final和org.springframework.boot:spring-boot-starter-data-jpa:1.5.2.RELEASE我必須在我的應用程序中執行以下屬性。屬性文件:
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
解決該問題的另一種方法是使用@AttributeOverrides和@AttributeOverride注釋。 在您的示例中, Time_T.sec
屬性映射到sec
列。 您可以像這樣映射ExampleClass:
@Entity
public class ExampleClass {
@Id
long eventId;
@AttributeOverrides(
@AttributeOverride(name = "sec", column = @Column(name = "start_sec"))
)
Time_T startTime;
Time_T stopTime;
}
結果映射是startTime.sec <=> start_sec
和stopTime.sec <=> sec
。 當然,您可以使用注釋為stopTipe.sec
列創建更有意義的名稱。
spring.jpa.hibernate.naming.implicit-strategy = org.hibernate.boot.model.naming.ImplicitNamingStrategyComponentPathImpl spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.