Java 逆向工程问题与hibernate工具的多对一单向关联

Java 逆向工程问题与hibernate工具的多对一单向关联,java,hibernate,jpa,reverse-engineering,hibernate-tools,Java,Hibernate,Jpa,Reverse Engineering,Hibernate Tools,我正在Eclipse(Helios)中使用Hibernate工具3.40。 我正试图用EJB3样式(即JPA2.0注释)从我的DB(MSSQL 2008)生成POJO 假设我有两个表A和B,其中有一个外键从A到B 默认情况下,这将为a生成一个POJO,其中B为成员(其“父项”),并为B生成一个POJO,其中集为成员(其“子项”)。 我想知道的是如何控制rev eng,以便只创建关联的一面(我有不同的用例,所以基本上这三个选项对我都很重要)。 我不想使用hbm.xml文件,因为我正在使用注释和JP


我正在Eclipse(Helios)中使用Hibernate工具3.40。 我正试图用EJB3样式(即JPA2.0注释)从我的DB(MSSQL 2008)生成POJO 假设我有两个表
A
B
,其中有一个外键从
A
B

默认情况下,这将为
a
生成一个POJO,其中
B
为成员(其“父项”),并为
B
生成一个POJO,其中
为成员(其“子项”)。
我想知道的是如何控制rev eng,以便只创建关联的一面(我有不同的用例,所以基本上这三个选项对我都很重要)。
我不想使用hbm.xml文件,因为我正在使用注释和JPA2.0,但我可以在反向工程过程中指定一些元数据,通过hibernae.reveng.xml休眠

我尝试配置
外键
属性,并在其中定义
exclude=true
,但这只为一个场景提供了半个答案。生成了带有bPK int成员的
A
POJO,该bPK int成员是可容忍和可理解的,但是
B
的生成POJO现在没有编译,因为
一对多
注释具有无效属性;
mappedby=“unresolved”
原因是
A
不再具有hibernate Reven可以映射回的属性


因此,我目前无法创建单向关联,我非常感谢您的帮助。

reveng创建一个类。策略
at
Hibernate代码生成配置

Should this foreignkey be excluded as a oneToMany 
例如:

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;
   }
}
方法的JavaDoc
excludeForeignKeyAsCollection

Should this foreignkey be excluded as a oneToMany 
还有另一个方法调用
excludeForeignKeyAsManytoOne

Should this foreignkey be excluded as a many-to-one 
目前(使用Hibernate工具5.2测试),生成单向多对一工作

在文档()中,您可以看到可以排除关系的某些方面:

例如(重命名属性)


或(不包括物业)


因此,为了只与@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获取my sample数据库的实例:

docker pull ghusta/postgres世界数据库:2.1


谢谢。我希望有更好的方法来实现这一点,而不是在那个“晦涩”的类中硬编码这些需求,但至少这是一个有效的解决方案。我也有同样的问题,但您的答案是针对“\uuuuuuu”的,这不是一个一般的答案。无论如何谢谢你
<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>