Как заставить инструменты обратного проектирования Hibernate генерировать <bag>или <list>для обратных ассоциаций? - PullRequest
1 голос
/ 09 февраля 2010

Я хочу добавить элементы в коллекцию, которая в конечном итоге будет отображаться так:

<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 может добавить к , или , объявленному с обратным =« true », без инициализации коллекции.»

Моя проблема в том,не знает, как заставить (или предложить) инструменты обратного проектирования (hibernate-tools.jar) использовать или - он ВСЕГДА использует .

Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 февраля 2010

Вы можете настроить процедуру обратного инжиниринга с помощью файла конфигурации обратного инжиниринга, который использует синтаксис 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>

Если это не работает, как есть, вы можете найти более подробную информацию об управлении процессом обратного проектирования здесь .

0 голосов
/ 21 апреля 2010

Когда бы вы не использовали Set-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();
     }
 }
}
...