【问题标题】:How do I get the Hibernate reverse engineering tools to generate <bag> or <list> for inverse associations?如何让 Hibernate 逆向工程工具为反向关联生成 <bag> 或 <list>?
【发布时间】:2011-01-14 23:05:58
【问题描述】:

我想将元素添加到最终映射如下的集合中:

<set name="others" inverse="true" lazy="true" table="other" fetch="select">
  <key>
    <column name="otherId" not-null="true" />
  </key>
  <one-to-many class="my.pkg.OtherEntity" />
</set>

我希望改用 Hibernate,因为我不关心检索它们的顺序,我只想保持关联的那一侧是最新的。根据https://www.hibernate.org/117.html,“Hibernate 可以添加到声明为 inverse="true" 的 而无需初始化集合。”

我的问题是我不知道如何强制(或建议)逆向工程工具(hibernate-tools.jar)使用 ——它总是使用

谢谢!

【问题讨论】:

    标签: java hibernate mapping reverse-engineering


    【解决方案1】:

    您可以使用逆向工程配置文件自定义逆向工程过程,该文件使用 XML 语法。我自己没有尝试过,但这个例子可能对你有用:

    <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE hibernate-reverse-engineering SYSTEM
        "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd">
    <hibernate-reverse-engineering>
        <table name="MYTABLE">
            <column name="others" type="bag"/>
        </table>
    </hibernate-reverse-engineering>
    

    如果它不能按原样工作,您可以找到有关控制逆向工程过程的更多详细信息here

    【讨论】:

      【解决方案2】:

      如果你有 List-type 而不是 Set-type,你可以使用 ant-java-task 使用:

      <java classname="de.wedeaf.beans.BeanHelper" classpath="WebContent/WEB-INF/classes" args="${basedir}/JavaSource"/>
      

      使用类“de.wedeaf.beans.BeanHelper”:

      package de.wedeaf.beans;
      import java.io.*;
      import org.w3c.dom.NodeList;
      import com.sun.org.apache.xerces.internal.parsers.DOMParser;
      public class BeanHelper {
       public static void main(String[] args) throws Exception {
        DOMParser parser = new DOMParser();  
        parser.parse("file:///"+args[0]+"/hibernate.cfg.xml");
        NodeList list = parser.getDocument().getElementsByTagName("mapping");
        for (int i = 0; list.item(i) != null; i++) {
         String entityFile = args[0] + File.separatorChar + list.item(i)   .getAttributes().getNamedItem("class").getNodeValue().replace('.', File.separatorChar) + ".java";
         // Eingabe
         FileInputStream in = new FileInputStream(entityFile);
         byte[] code=new byte[in.available()];
         in.read(code);
         in.close();
         // Verarbeitung
         String content=new String(code);
         content = content.replaceAll("java.util.Set", "java.util.List");
         content = content.replaceAll("java.util.HashSet", "jav   a.util.ArrayList");
         content = content.replaceAll(" HashSet<", " ArrayList<");
         content = content.replaceAll("Set<", "List<");
             // Ausgabe
         FileWriter fw = new FileWriter(entityFile);
         fw.write(content);
         fw.close();
           }
       }
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-23
        • 1970-01-01
        • 2012-03-15
        • 2016-06-18
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多