- >https://stackoverflow.com/a/35549928/5909679
まず第一に、あなたのPerson
-entityとCompany
-entityはある種のID
を必要とする...さらに、あなたは、一方向のOneToMany
を持つことができますManyToOne
には双方向の関係が必要です。
あなたのフィールドcompanyId
は全く必要ではなく、ManyToOne
には影響しません。 JoinColumn
注釈が必要です。これは、ジョインテーブルの中であなたの望むカラム名を宣言します。以下のようにそれを実行します。
あなたPerson
-entityでは:あなたのCompany
-entityで
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@ManyToOne //FetchType.LAZY is by default
@JoinColumn(name = "company_id")
private Company company;
:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@OneToMany(mappedBy = "company")
private List<Person> persons;
あなたが参加し、テーブルの命名のより多くの制御を持っているしたい場合次のように宣言します。
@ManyToOne
@JoinTable(name="desired_table_name", joinColumns={@JoinColumn(name="person_id", referencedColumnName="id")}, inverseJoinColumns={@JoinColumn(name="company_id", referencedColumnName="id")})
private Company company;
前述のように、CompanyIdフィールドは必要ありません。ただし、識別子を直接入力せずに直接アクセスする場合は、便利です。 getCompany()。getId()呼び出し。nullの可能性があります。私の知る限り、追加の識別子フィールドは広く使われていません。 – Marius