我有两个实体事务和具有ManyToOne映射的类别。这么多交易都属于类别。
@Entity
class Transaction extends Model{
@Id
public Long id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="cat_id", referencedColumnName="cat_id")
public Category cat;
}
@Entity
class Category extends Model{
@Id
@Column(name="cat_id")
public Long catId;
@Column(unique=true)
public String catName;
@ManyToOne
public List<Transaction> transactions
}
现在,当我两次添加具有相同catName的两个事务时,它会在catName上引发唯一约束失败。如果CatName已经存在(而不是总是试图插入),我有没有办法指示Ebean合并类别?
考虑到以下情况,这种映射方法也是正确的:
如果我删除了交易,则不应删除相应的类别,因为它可能被其他交易引用。
感谢您的帮助!
答案 0 :(得分:4)
我认为你在Category
模型上有错误的注释。如果您要列出与任何Transaction
数据相对应的所有Category
数据。您应该使用@OneToMany
或@ManyToMany
对此进行标记。当您将Transaction
与Category
的关系标记为多对一关系时,意味着每个Transaction
都有一个 {{ 1}}与。
Category
// This means every transaction has exactly one category associated
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="cat_id", referencedColumnName="cat_id")
public Category cat;
与Category
之间的关系应为一对多。以下代码是如何修复模型的指南:
Transaction
它应该允许您使用相同的@Entity
@Table(name = "category")
public class Category extends Model {
@Id
@Column(name="cat_id")
public Long catId;
@Column(unique=true)
public String catName;
// This means one category can have many transaction associated
@OneToMany(mappedBy = "cat")
public List<Transaction16507336> transactions;
}
保存不同的Transaction
对象。希望它对你的朋友有用。 :)
Category
和Category
模型现在具有双向关系,这意味着如果您有Transaction
个对象,您也可以将Category
对象关联到其中,反之亦然。要保存模型,您可以遵循以下方法:
Transaction
注意: This reference可能对您有用。