Ebean ManyToOne Mapping CRUD

时间:2013-05-12 12:27:57

标签: jpa orm playframework-2.0 ebean

我有两个实体事务和具有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合并类别?

考虑到以下情况,这种映射方法也是正确的:
  如果我删除了交易,则不应删除相应的类别,因为它可能被其他交易引用。

感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

我认为你在Category模型上有错误的注释。如果您要列出与任何Transaction数据相对应的所有Category数据。您应该使用@OneToMany@ManyToMany对此进行标记。当您将TransactionCategory的关系标记为多对一关系时,意味着每个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对象。希望它对你的朋友有用。 :)


更新

CategoryCategory模型现在具有双向关系,这意味着如果您有Transaction个对象,您也可以将Category对象关联到其中,反之亦然。要保存模型,您可以遵循以下方法:

Transaction

  

注意: This reference可能对您有用。