3

ManyToOne マッピングを持つ 2 つのエンティティ トランザクションとカテゴリがあります。非常に多くのトランザクションが have カテゴリに分類される可能性があります。

@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 を持つ 2 つのトランザクションを 2 回追加すると、catName で Unique 制約エラーがスローされます。CatName が既に存在する場合 (常に挿入しようとするのではなく)、Ebean にカテゴリをマージするように指示する方法はありますか?

また、次のことを考慮して、このマッピング アプローチは正しいですか。
トランザクションを削除する場合、対応するカテゴリは他のトランザクションによって参照される可能性があるため、削除しないでください。

助けてくれてありがとう!

4

1 に答える 1

4

Categoryモデルの注釈が間違っていると思います。Transaction任意のデータに対応するすべてのデータを一覧表示するCategory場合。@OneToManyこれをまたはでマークする必要があり@ManyToManyます。Transaction関係を多対一の関係Categoryとしてマークしたように、すべての関係に1 つが関連付けられていることを意味します。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の関係は1 対多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。それがあなたの友人に役立つことを願っています。:)


アップデート

CategoryTransactionモデルは双方向の関係を持つようになりました。つまり、オブジェクトを持っている場合は、オブジェクトCategoryを関連付けることもできTransaction、その逆も可能です。モデルを保存するには、次のアプローチに従います。

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 に答える