[英]Rename the generated foreign key column generated using custom Naming Strategy
我想更改由我的架構生成的外鍵列的名稱。 以下是我正在使用的架構配置:
<xs:complexType name="ActivityFact">
<xs:sequence>
<!-- Other Element Declaration -->
</xs:sequence>
<xs:attribute name="id" type="xs:long" />
</xs:complexType>
當我運行此配置時,我得到2個表:1. ActivityDim 2. ActivityFact(作為名稱為ActivityDim_ActivityFact_Id的外鍵的ActivityDim ID)
我想將上面生成的名稱更改為在這種情況下為actvitiyDim的架構元素名稱。 我不確定如何使用自定義命名策略。 我試圖覆蓋foreignKeyColumnName方法,但是沒有用
public class ForeignKeyNamingStrategy extends ImprovedNamingStrategy {
private final static Logger logger = LoggerFactory.getLogger(ForeignKeyNamingStrategy.class);
@Override
public String foreignKeyColumnName(
String propertyName, String propertyEntityName, String propertyTableName, String referencedColumnName
) {
return propertyName;
}
我在persistence.xml中也提供了此類參考
<persistence version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_2_0.xsd"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="reportingData">
<!-- These properties are defined in persistence-model/src/main/resources/persistence.xml.
HyperJAXB3 merges them into its generated and final persistence.xml -->
<properties>
<property name="hibernate.ejb.naming_strategy"
value="com.namingStrategy.ForeignKeyNamingStrategy" /></properties>
</persistence-unit>
</persistence>
我是Hibernate的新手,我的理解可能會有點疏遠。 有人可以建議嗎?
免責聲明:我是Hyperjaxb的作者。
這是一個初步的答案,稍后我們可能需要對其進行完善。
首先,請顯示帶有ActivityDim
和ActivityFact
的完整架構片段以及生成的內容。 您在這里有many-to-one
或many-to-many
或one-to-many
關系嗎?
接下來,查看自定義指南 。 據我了解您的問題,您可能需要自定義外鍵列的名稱。 如果不執行自定義的namin策略,這可能是OOTB。 假設您在這里有one-to-many
關系,那么這將在這里 。 這是用於定制的ORM架構的相關部分 。 我認為您需要在此處自定義join-column
的名稱,所以我的猜測將是這樣的:
<hj:one-to-many>
<orm:join-column name="actvitiyDim"/>
</hj:one-to-many>
<xs:element name="one-to-many-join-column" type="test:two" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<hj:one-to-many>
<orm:join-column name="O2MJC_ONE_ID"/>
</hj:one-to-many>
</xs:appinfo>
</xs:annotation>
</xs:element>
可能非常接近您的情況。
現在,命名策略。
命名策略與Hibernate或JPA無關。 命名策略是Hyperjaxb3在架構編譯期間使用的內部組件,用於生成表,列等的名稱。因此,它實際上是非常底層的。
如果出於某種原因想要不同的命名,則可以編寫和配置自己的命名策略實現。 例如,請參見此測試項目 。 但是它不再是自定義的 ,它已經擴展了 Hyperjaxb。 您基本上將重寫 Hyperjaxb的一部分。 例如,如果要更改默認情況下生成所有 FK名稱的方式,可以執行此操作。 我不確定這就是您想要的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.