我想在集合中添加元素,最终会像这样映射:
<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代替,因为我不关心它们被检索的顺序,我只想保持关联的那一方是最新的。根据{{3}},“Hibernate可以添加到&lt; bag&gt;,&lt; idbag&gt;或&lt; list&gt;声明with inverse =”true“而不初始化集合。”
我的问题是我不知道如何强制(或建议)使用逆向工程工具(hibernate-tools.jar)来使用&lt; bag&gt;或&lt; list&gt; - 它始终使用&lt; set&gt;。
谢谢!
答案 0 :(得分:3)
您可以使用反向工程配置文件自定义逆向工程过程,该文件使用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。
答案 1 :(得分:0)
你曾经有过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();
}
}
}