6


我在 Eclipse (Helios) 中使用 Hibernate 工具 3.40。我正在尝试使用 EJB3 样式(即 JPA2.0 注释)从我的数据库(MSSQL 2008)生成 POJO。
假设我有两个表AB其中有一个外键 from Ato B
默认情况下,这A会生成一个 POJOB作为成员(其“父级”)和一个 POJO作为成员(其“子级”)B。 我想知道如何控制 rev-eng 以便只创建关联的一侧(我有不同的用例,所以基本上所有三个选项对我来说都很重要)。Set<A>

我不想使用 hbm.xml 文件,因为我正在使用注释和 JPA2.0,但我可以在逆向工程过程中指定一些元数据以通过 hibernae.reveng.xml 休眠

我已经尝试配置foreign-key属性并在那里定义,exclude=true但这只为我提供了一个场景的一半答案。这生成了一个A带有 bPK int 成员的 POJO,这是可以容忍和可以理解的,但现在生成的 POJOB无法编译,因为one-to-many注释具有无效属性;由于不再具有 hibernate reveng 可以映射回的属性mappedby="unresolved"A

因此,我目前无法创建单向关联,我将不胜感激。

4

2 回答 2

4

reveng. strategy为at创建一个类Hibernate Code Generation Configuration

例子 :

public class MyReverseEngineeringStrategy extends DelegatingReverseEngineeringStrategy {

   public MyReverseEngineeringStrategy(ReverseEngineeringStrategy delegate) {
       super(delegate);
   }

   @Override
   public void setSettings(ReverseEngineeringSettings settings) {
       super.setSettings(settings);
   }

   @Override
   public boolean excludeForeignKeyAsCollection(String keyname, 
    TableIdentifier fromTable, java.util.List fromColumns, 
    TableIdentifier referencedTable, java.util.List referencedColumns) {

    // TODO : Your work here
    if (keyname.equals("___") && 
        fromTable.getName().equals("___") && 
        fromColumns.contains("___") && 
        referencedTable.getName().equals("___") && 
        referencedColumns.contains("___")) {

        return true;
    }

    return false;
   }
}

方法的 JavaDocexcludeForeignKeyAsCollection

Should this foreignkey be excluded as a oneToMany 

还有另一个方法调用excludeForeignKeyAsManytoOne

Should this foreignkey be excluded as a many-to-one 
于 2011-03-11T05:34:17.810 回答
1

目前(使用 Hibernate Tools 5.2 测试),生成单向多对一作品。

在文档(https://docs.jboss.org/tools/4.0.0.Final/en/hibernatetools/html_single/index.html#hibernaterevengxmlfile)中,您可以看到可以排除关系的某些方面:

例如(重命名属性)

 <!-- control many-to-one and set names for a specific named foreign key constraint -->
 <foreign-key constraint-name="ORDER_CUST">
   <many-to-one property="customer"/>
   <set property="orders"/>
 </foreign-key>

或(不包括属性)

 <!-- can also control a pure (shared pk) one-to-one  -->
  <foreign-key constraint-name="ADDRESS_PERSON">
   <one-to-one exclude="false"/>
   <inverse-one-to-one exclude="true"/>
  </foreign-key>

因此,要仅与 @ManyToOne 建立关系的一方面,您可以执行以下操作:

<table name="city" schema="public">
    <primary-key property="id">
        <key-column name="id" type="integer"/>
    </primary-key>
</table>

<table name="country" schema="public">
    <foreign-key constraint-name="country_capital_fkey" foreign-schema="public">
        <many-to-one property="capital" exclude="false"/>
        <set exclude="true" />
    </foreign-key>
</table>

您还可以在此处使用 Docker 获取我的示例数据库的实例:

docker pull ghusta/postgres-world-db:2.1

于 2017-06-23T10:46:37.367 回答