hibernate annotation onetomany级联保存问题

autonomy 2009-07-22 04:45:39
请教高手,我有两个对象是一对多和多对一的关系,其中多对一(Wbsitem)表里面有外键WBS_ID引用一对多方(WBS表)
我在JUNIT里面写了个测试方法保存WBS对象时级联保存WBSITEM对象,但总是不成功。网上有的说是把javax.pesistence.cascade、cascadetype换成hibernate.annotation.cascade、cascadetype但还是不行!控制台发出的操作语句为插入WBS表如INSRT INTO WBS(....) VALUE(...) WBSITEM表UPDATE WBSITEM SET ... WHERE..这是为什么呢,
下面是我的代码


@Entity
@Table(name="t_Wbs")
public class Wbs implements java.io.Serializable {

/**
*
*/
@Transient
private static final long serialVersionUID = 1L;
// Fields
@Id
@GeneratedValue(generator = "c-assigned")
@GenericGenerator(name = "c-assigned", strategy = "assigned")
@Column(name="wbsid")
private String wbsid;

@OneToOne()
@Cascade(value=CascadeType.SAVE_UPDATE)
@JoinColumn(name="prjid",referencedColumnName="prjid",unique=true)
private Projects projects;

@Column(name="layer")
private int layer;

@Column(name="rootitemid")
private String rootitemid;

@Column(name="creator")
private String creator;

@OneToMany(fetch=FetchType.EAGER,targetEntity=Wbsitem.class,mappedBy="wbs",cascade=javax.persistence.CascadeType.ALL)
@Cascade(value={CascadeType.ALL})
@JoinColumn(name="wbs_id")
private Set<Wbsitem> wbsitems;





@Entity
@Table(name="t_Wbsitem")
public class Wbsitem implements java.io.Serializable {

/**
*
*/
private static final long serialVersionUID = 1L;

// Fields
@Id
@GeneratedValue(generator = "c-assigned")
@GenericGenerator(name = "c-assigned", strategy = "assigned")
@Column(name="wbsitemid")
private String wbsitemid;

@ManyToOne
//@Cascade(value=CascadeType.ALL)
@JoinColumn(name="wbs_id" ,insertable=true,updatable=false)
private Wbs wbs;

@Column(name="title")
private String title;

@Column(name="description")
private String description;

@OneToMany(targetEntity=Wbsitemhierarchy.class,mappedBy="wbsitem")
@Cascade(value=CascadeType.ALL)
//@OnDelete(action=OnDeleteAction.CASCADE)
private Set<Wbsitemhierarchy> wbsitemhierarchies;
测试方法

@Test
@Rollback(false)
public void testManyToOne()
{


Wbs wbs=new Wbs();
try {

wbs.setCreator("me");
wbs.setWbsid("wbs001");
wbs.setLayer(4);

} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch(Exception ex)
{
ex.printStackTrace();
}


Set items=new HashSet();

Wbsitem item =null;
for(int i=0;i<5;i++)
{
item=new Wbsitem();
item.setWbs(wbs);
item.setWbsitemid("wi00"+String.valueOf(i));
item.setTitile(String.valueOf(i));
items.add(item);

//this.entityDao.save(item);
}
wbs.setWbsitems(items);
this.entityDao.save(wbs);
}
...全文
1316 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yushanyuan 2009-08-06
  • 打赏
  • 举报
回复
当选择assigned生成器时,除非有一个version或timestamp属性,或者你定义了 Interceptor.isUnsaved(),否则需要让Hiberante使用 unsaved-value="undefined",强制Hibernatet查询数据库来确定一个实例是瞬时的(transient) 还是脱管的(detached)。
yushanyuan 2009-08-05
  • 打赏
  • 举报
回复
上面写错了
yushanyuan 2009-08-05
  • 打赏
  • 举报
回复
你没有指定关系的管理方,即mappedby
autonomy 2009-07-31
  • 打赏
  • 举报
回复
不行,试过了!!!
longzhizu 2009-07-23
  • 打赏
  • 举报
回复
一表的POJO映射文件中的set 设置cascade="all",就可以级联保存了。OnePojo(一表) ManyPojo(多表)
ManyPojo mp = new ManyPojo (); mp.setName("aa");
OnePojo op = new OnePojo(); op.setName("bb");
mp.setOnePojo(op);
Set set = new HashSet(); set.add(mp);
op.setManyPojo(set);//级联保存多个表
oneDao.save(op);
这样就级联进去了。。接分
autonomy 2009-07-23
  • 打赏
  • 举报
回复
还是没人回答!!!
autonomy 2009-07-22
  • 打赏
  • 举报
回复
自顶

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧