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创建一个类。策略
atHibernate代码生成配置
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;
}
}
方法的JavaDocexcludeForeignKeyAsCollection
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>