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
Hibernate JPA级联不工作_Hibernate_Jpa - Fatal编程技术网

Hibernate JPA级联不工作

Hibernate JPA级联不工作,hibernate,jpa,Hibernate,Jpa,我有两门课:支出和类别。一项支出可以有多个类别。我希望通过支出(家长)实现所有类别(子女)的级联储蓄。但无法实现这一点。在保留支出记录时,不会创建类别条目。请让我知道我做错了什么。以下是我的课程: @Entity @Table(name="EXPENDITURE") public class Expenditure { private Long id; @OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE}, ma

我有两门课:支出和类别。一项支出可以有多个类别。我希望通过支出(家长)实现所有类别(子女)的级联储蓄。但无法实现这一点。在保留支出记录时,不会创建类别条目。请让我知道我做错了什么。以下是我的课程:

@Entity
@Table(name="EXPENDITURE")
public class Expenditure {

    private Long id;

    @OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE}, mappedBy="expenditure")
    private Set<Category> associatedCategories = new HashSet<Category>();   

    public Expenditure() {  }

    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="EXPENDITURE_ID")
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    public void addCategory(Category category)
    {
        this.associatedCategories.add(category);
        category.setExpenditure(this);      
    }
}

@Entity
@Table(name="CATEGORY")
public class Category {

    @Id @GeneratedValue
    @Column(name="CATEGORY_ID")
    private Long id;
    private String name;

    @ManyToOne(targetEntity=Expenditure.class)
    private Expenditure expenditure;

    public Category(){}
    public Category(String name)
    {
        this.name = name;
    }
    public Category(String name,String description)
    {
        this.name = name;
    }
    @Column(name="NAME")
    public String getName() {
        return name;
    }       

    public Expenditure getExpenditure() {
        return expenditure;
    }
    public void setExpenditure(Expenditure expenditure) {
        this.expenditure = expenditure;
    }
@实体
@表(name=“支出”)
公共类支出{
私人长id;
@OneToMany(cascade={CascadeType.PERSIST,CascadeType.MERGE},mappedBy=“expense”)
私有集合associatedCategories=新HashSet();
公共开支({}
@Id@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“支出”\u ID)
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共无效添加类别(类别)
{
此.associatedCategories.add(类别);
类别.支出(本);
}
}
@实体
@表(name=“CATEGORY”)
公共类类别{
@Id@GeneratedValue
@列(name=“CATEGORY\u ID”)
私人长id;
私有字符串名称;
@多通(目标实体=支出类)
私人开支;
公共类别(){}
公共类别(字符串名称)
{
this.name=名称;
}
公共类别(字符串名称、字符串描述)
{
this.name=名称;
}
@列(name=“name”)
公共字符串getName(){
返回名称;
}       
公共开支{
回报支出;
}
公共支出(支出){
这就是支出;
}
尝试添加

@ManyToOne(targetEntity=Expenditure.class)
@JoinColumn(name="parentExpenditureId")   // or whatever column name exists in your database schema
private Expenditure expenditure;

另外,不要混淆实体类中的字段和属性访问类型。

感谢Satadru的回复。.我通过将标识符注释转移到支出类中的字段级别,解决了我的问题。它在不添加JoinColumn(我认为这是可选的)的情况下工作。但是,我不确定原因!!