簡體   English   中英

自動為@Embeddable類的列名添加前綴

[英]Automatically Add a Prefix to Column Names for @Embeddable Classes

我正在開發一個項目,我通過添加Hibernate注釋來持久保存一些POJO。 Time_T一個問題是像這樣的代碼失敗,因為Hibernate試圖將Time_T的子字段Time_T到同一列(即startTime.secstopTime.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_secstartTime_nsecstopTime_secstopTime_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_secstopTime.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM