我目前正在尝试使用@OneToMany(cascade = CascadeType.ALL)保留对象的简单列表的集合。 Parent_Child的表是在MySQL中创建的,但使用SaveOrUpdate时不会更新每个对象的键。知道是什么问题吗? (定义了我的父密钥并生成了子代)。我先将子项添加到父对象的集合中,然后再继续执行saveOrUpdate。我正在将MySQL与休眠3一起使用,并且将auto属性设置为create-drop。
测试班:
public class Tester {
public static void main(String[] args) {
VideoChannel testChannel = new VideoChannel("Test Channel");
VideoChannelMap v = new VideoChannelMap(testChannel, "Test Map");
VideoSource sc2Vid = new VideoSource("starcraft-ii-ghost-of-the-past.mp4", "EinghersStreamingBucket");
testChannel.add(sc2Vid);
Session s = HibernateSessionFactory.getSession();
s.beginTransaction();
s.saveOrUpdate(v);
s.close();
}
}
实体:
@Entity
public class VideoChannelMap {
@Id
String name;
@OneToMany(cascade=CascadeType.ALL)
List<VideoChannel> channelMap;
public VideoChannelMap(VideoChannel initialVid, String name)
{
this.name = name;
channelMap = new ArrayList<VideoChannel>();
channelMap.add(initialVid);
initialVid.setParent(this);
}
}
@Entity
public class VideoChannel {
@Id @GeneratedValue
Long id;
...
}
最佳答案
您必须实际提交交易。当您关闭一个仍处于打开状态的事务的会话时,该行为的定义不是很明确,可能取决于其数据库的设置方式。
Transaction t = s.beginTransaction();
s.saveOrUpdate(v);
t.commit();
s.close();
显然,您还应该对“真实”代码进行一些try-catch-finally操作;)
关于java - 不通过Hibernate保留OneToMany带注释的集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3586702/