Java hibernate中的saveOrUpdate()存在问题
最近我开始使用hibernate。要插入或更新,我正在使用Java hibernate中的saveOrUpdate()存在问题,java,hibernate,hql,Java,Hibernate,Hql,最近我开始使用hibernate。要插入或更新,我正在使用saveOrUpdate()函数。 如果我更新一个条目,我就可以正常工作。但是,使用新条目hibernate生成一个查询。但是表中没有任何内容得到更新 我的情况是这样的, 我在两个表之间使用多对一&一对多关系[费用,类别] 对于更新或插入,我从 客户端。在服务器端,我使用expense对象设置category对象 public void upDateExpenseTable(Expens expense, Category categor
saveOrUpdate()
函数。
如果我更新一个条目,我就可以正常工作。但是,使用新条目hibernate生成一个查询。但是表中没有任何内容得到更新
我的情况是这样的,
我在两个表之间使用多对一&一对多关系[费用,类别]
对于更新或插入,我从
客户端。在服务器端,我使用expense
对象设置category
对象
public void upDateExpenseTable(Expens expense, Category category) {
expense.setCategory(category);
Session session = Main.getSession();
try{
System.out.println("Inside Update Try Block");
session = Main.getSession();
Transaction tr = session.beginTransaction();
session.saveOrUpdate(expense);
tr.commit();
}
finally{
session.close();
}
}
对象结构类似于,catogery.catId,category.catName
&
expense.expnsId,expense.expnsName,expense.amount,expense.status,expense.userName
但是在费用表cat\u id
中还有一列。它是通过映射注释实现的。但我在费用实体中没有这方面的任何财产。
插入新数据时,我不提供任何Id
任何建议
public class Expens implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int expnsId;
private int amount;
private String date;
private String status;
private String userName;
@ManyToOne
@JoinColumn(name = "cat_id")
private Category category;
//Setter Getter
}
类别类别
public class Category{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int catId;
private String catName;
@OneToMany(targetEntity=Expens.class, mappedBy = "category", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private List<Expens> expenses;
}//Setters Getters ommited.
公共类类别{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int catId;
私有字符串catName;
@OneToMany(targetEntity=Expens.class,mappedBy=“category”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私人清单费用;
}//二传手接球手接球。
我不确定我是否理解了所有内容,但我至少可以告诉您,您没有正确构建双向关联,在构建对象图时,您需要设置“链接的两侧”:
...
expense.setCategory(category);
category.getExpenses().add(expense);
...
session.saveOrUpdate(category);
这通常是在“链接管理”方法中完成的,例如(在类别中)
:
有趣的是(或不是),我今天已经写了三次了
资源
- Hibernate核心文档
通过注释映射类别但费用实体上没有属性的语句没有任何意义。你能发布实际的注释实体吗?可能有助于澄清问题。@aff:现在代码已经更新了。问题还没有解决。我还有其他工作要完成。我想我自己无法理解它。现在我有后援了。我的老板会做这些事来训练我。我想自己去理解它。但是,没问题。。。无论如何,谢谢你,谢谢你的回复。:)
@Entity
public class Category {
@Id @GeneratedValue(strategy=GenerationType.AUTO)
private int catId;
private String catName;
@OneToMany(targetEntity=Expens.class, mappedBy = "category", cascade = CascadeType.ALL, fetch=FetchType.EAGER)
private List<Expens> expenses = new ArrayList<Expens>();
public void addToExpenses(Expense expense) {
expenses.add(expense);
expense.setCategory(this);
}
protected List getExpenses() { // protected to prevent direct access from outside the hierarchy
return expenses;
}
protected void setExpenses(List expenses) { // protected to prevent direct access
this.expenses = expenses;
}
//...
}
category.addToExpenses(expense);
session.saveOrUpdate(category);