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

Itt*_*tai 5 java hibernate jpa reverse-engineering hibernate-tools


我在Eclipse(Helios)中使用Hibernate工具3.40.我正在尝试使用EJB3样式(即JPA2.0注释)从我的数据库(MSSQL 2008)生成POJO.
比方说,我有两个表AB那里是从外键AB.
默认情况下,这会生成一个POJO,A其中有B一个成员(其"父")和一个POJO,B其中有Set<A>一个成员(其"子").
我想知道如何控制rev-eng,以便只创建关联的一面(我有不同的用例,所以基本上所有三个选项对我来说都很重要).
我不想使用hbm.xml文件,因为我正在使用注释和JPA2.0但是我可以通过hibernae.reveng.xml在逆向工程过程中指定一些元数据来休眠

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

所以,我目前无法创建单向关联,我会感激任何帮助.

lsc*_*hin 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;
   }
}
Run Code Online (Sandbox Code Playgroud)

方法的 JavaDocexcludeForeignKeyAsCollection

Should this foreignkey be excluded as a oneToMany 
Run Code Online (Sandbox Code Playgroud)

还有另一个方法调用excludeForeignKeyAsManytoOne

Should this foreignkey be excluded as a many-to-one 
Run Code Online (Sandbox Code Playgroud)