我目前正在尝试使用@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/

10-13 06:19