我目前正在尝试使用@OneToMany(cascade = CascadeType.ALL)来保存一个简单的对象列表。 Parent_Child的表在MySQL中创建,但是使用SaveOrUpdate时不会更新每个对象的键。知道问题是什么吗? (定义了我的父键并生成子项)。在使用saveOrUpdate进行持久化之前,我将子项添加到父对象的集合中。我正在使用MySQL和hibernate 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;
...
}
答案 0 :(得分:2)
您必须实际提交您的交易。在事务仍然打开的情况下关闭会话时的行为定义不明确,可能取决于数据库在下面的设置方式。
Transaction t = s.beginTransaction();
s.saveOrUpdate(v);
t.commit();
s.close();
显然你应该在那里进行一些try-catch-finally动作以获得“真正的”代码;)