2

ユーザーテーブルと関心テーブルがあり、関心テーブルの行数は有限であり、各ユーザーが一連の関心を持っているというシナリオをモデル化しようとしています。これは私のコードです:

@Entity 
@Table(name="user")
public class User extends Model{
@OneToMany(cascade = CascadeType.PERSIST)
@JoinTable(name="user_interest")
public List<Interest> interests;
} 


@Entity 
@Table(name="interest")
public class Interest extends Model{
@Id
public Long id;
public String   name;
public String   image;
}

当然、私は結合テーブルを持ちたいのですが、進化は結合テーブルの作成を無視しており、関心テーブルに余分な列を追加してそれを実行しようとしています。これは

create table interest (
19 id                        bigint auto_increment not null,
20 user_id                   bigint not null,
21 name                      varchar(255),
22 image                     varchar(255),
23 constraint pk_interest primary key (id))
.

私は何を間違っていますか?? ebean を使用して play2.2 で単純な OneToMany リレーションシップ WITH Join テーブルを作成するにはどうすればよいですか?

感謝とよろしく

4

2 に答える 2

5

これは適切な動作です。モデル@OneToMany内のリレーションはモデル内のUserように読み取ることができます。これは、文字通り「各関心は 1 人のユーザーのみに属する可能性がある」ことを意味するため、ユーザーの ID を持つフィールドを含む場合は十分です(この場合)。@ManyToOneInterestInterestuser_id

結合テーブルは MM リレーションを格納するために使用されるため、結合テーブルの使用を強制するには、Userモデル内のリレーションを に変更するだけで済み@ManyToManyます。これにより、必要なものが自動的に作成されます。もちろん、それぞれの興味が 1 人のユーザーだけと結合できる場合は意味がありません。与えられた興味がまだ他の誰かに結合されていない場合、保存中に制御する必要があるからです。

ところで: 2 つのヒント:

  1. モデルが同じ名前の場合、アノテーションを使用する必要はありません@Table(name="interest")。Ebean が自動的に作成します。
  2. 将来 (つまり、Heroku で) postgress に移行する予定がある場合は、PG のキーワードのように User モデルのテーブル名をusers(または別のもの) に変更すると、競合が発生します。user
于 2012-09-28T10:05:18.480 に答える