3

我有两个带有 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 合并类别?

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

谢谢你的帮助!

4

1 回答 1

4

Category我认为您对模型的注释有误。如果要列出Transaction与任何数据对应的所有Category数据。你应该用@OneToMany或标记它@ManyToMany。当您将Transaction关系标记Category多对一关系时,这意味着每个人Transaction都有一个 Category关联。

// This means every transaction has exactly one category associated 
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="cat_id", referencedColumnName="cat_id")
public Category cat; 

Categorywith之间的关系Transaction应该是One-To-Many。下面的代码是如何修复模型的指导:

@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,您也可以关联对象,反之亦然。要保存您的模型,您可以遵循以下方法:TransactionCategoryTransaction

Category cat1 = Ebean.find(Category.class, 1L); // fetch category that exsist 
Transaction t1 = new Transaction(); // this is new transaction
t1.cat = cat1; // cat1 category
t1.save();
Transaction t2 = new Transaction(); // this is new transaction
t2.cat = cat1; // cat1 category
t2.save();

注意: 此参考资料可能对您有用。

于 2013-05-13T03:54:52.117 回答