2016-04-01 21 views
0

私は2つのエンティティ(市民、町)を作成しようとしています。
市民は1つの町へのリンクです。町には複数の市民がいることがあります。
どのような関係が良いのか分かりません。Spring Data:2つのエンティティ間の関係を設定する

私がしようとしていること:

@Entity 
@Table(name = "citizen") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class Citizen implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @NotNull 
    @Column(name = "lastname", nullable = false) 
    private String lastname; 

    @OneToOne 
    @JoinColumn 
    private Town ownTown; 

//getter and setter 
} 


@Entity 
@Table(name = "town") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
public class Town implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @NotNull 
    @Column(name = "town_name", nullable = false) 
    private String townName; 

//getter and setter 
} 

が、私はによって引き起こさ

取得しています: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 重複したエントリ '1' のためにキー「town_id」

市民を挿入しようとしたとき。

この関係で何が問題になっていますか?

答えて

0
@Entity 
public class Citizen implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @ManyToOne 
    @JoinColumn(name = "town_id", referencedColumnName = "id") 
    private Town town; 

//getter and setter 
} 


@Entity 
public class Town implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(mappedBy = town) 
    private List<Citizen> citizens; 

//getter and setter 
} 
0

1つの町には多数の市民がいます。これは1対多の関係です。

  • TownIdでタウンテーブルを作成します。
  • シチズンテーブルを作成し、上記のタウンテーブルからTownIdを外部キーとして参照します。この方法で、多くの市民が1つの町にいると指定できます。

  • ここでは、SpringDataの多対1関係のためのexampleがあります。 A犬舎(ユーザー)のこの例は、複数の犬を持つことができます。あなたのニーズに合わせてカスタマイズしてください。

関連する問題