Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hibernate中的saveOrUpdate()存在问题_Java_Hibernate_Hql - Fatal编程技术网

Java hibernate中的saveOrUpdate()存在问题

Java hibernate中的saveOrUpdate()存在问题,java,hibernate,hql,Java,Hibernate,Hql,最近我开始使用hibernate。要插入或更新,我正在使用saveOrUpdate()函数。 如果我更新一个条目,我就可以正常工作。但是,使用新条目hibernate生成一个查询。但是表中没有任何内容得到更新 我的情况是这样的, 我在两个表之间使用多对一&一对多关系[费用,类别] 对于更新或插入,我从 客户端。在服务器端,我使用expense对象设置category对象 public void upDateExpenseTable(Expens expense, Category categor

最近我开始使用hibernate。要插入或更新,我正在使用
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);