Java OneToMany注释集合未通过Hibernate持久化

Java OneToMany注释集合未通过Hibernate持久化,java,hibernate,orm,jpa,Java,Hibernate,Orm,Jpa,我目前正在尝试使用@OneToMany(cascade=CascadeType.ALL)来持久化一个集合,以获得一个简单的对象列表。父\子表是在MySQL中创建的,但每个对象的键在使用SaveOrUpdate时不会更新。知道问题是什么吗?(已定义我的父项并生成子项)。在使用saveOrUpdate持久化之前,我将子对象添加到父对象的集合中。我在Hibernate3中使用MySQL,我的auto属性设置为createdrop 测试类: public class Tester { publi

我目前正在尝试使用@OneToMany(cascade=CascadeType.ALL)来持久化一个集合,以获得一个简单的对象列表。父\子表是在MySQL中创建的,但每个对象的键在使用SaveOrUpdate时不会更新。知道问题是什么吗?(已定义我的父项并生成子项)。在使用saveOrUpdate持久化之前,我将子对象添加到父对象的集合中。我在Hibernate3中使用MySQL,我的auto属性设置为createdrop

测试类:

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;
    ...
}
@实体
公共类视频频道地图{
@身份证
字符串名;
@OneToMany(级联=级联类型.ALL)
列出渠道图;
公共视频频道映射(视频频道初始视频,字符串名称)
{
this.name=名称;
channelMap=newarraylist();
channelMap.add(初始值vid);
initialVid.setParent(本文件);
}
}
@实体
公共级视频频道{
@Id@GeneratedValue
长id;
...
}

您必须实际提交事务。在事务仍然打开的情况下关闭会话的行为没有很好的定义,可能取决于数据库的设置方式

Transaction t = s.beginTransaction();
s.saveOrUpdate(v);
t.commit();
s.close();

显然,对于“真实”代码,您还应该有一些try-catch-finally操作;)

不起作用的实际代码将非常有助于缩小几十个潜在原因的范围。提交事务肯定会有帮助。