2017-06-13 25 views
1

私は以下の2つのクラス(エンティティ)を持っています。JPA HIbernate - ManyToOneマッピング - 存在しない場合は挿入

私が行うことができるようにしたいどのような人クラス

@Entity 
@Table(name = "person") 
public class Person { 

    @Id 
    @GeneratedValue(strategy= GenerationType.SEQUENCE, 
    generator="person_id_seq") 
    @SequenceGenerator(name="person_id_seq", sequenceName="person_id_seq", 
    allocationSize=1) 
    private Integer person_id; 

    @ManyToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL}) 
    @JoinColumn(name = "location_id") 
    private Location location; 
} 

場所クラス

@Entity 
@Table(name = "location") 
public class Location { 

    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "location_seq_gen") 
    @SequenceGenerator(name = "location_seq_gen", sequenceName = "location_id_seq", allocationSize = 1) 
    @Column(name = "location_id") 
    private Long id; 

    @Column(name = "address_1") 
    private String address1; 

    @Column(name = "address_2") 
    private String address2; 

    @Column(name = "city") 
    private String city; 

    @Column(name = "state") 
    private String state; 

    @Column(name = "zip") 
    private String zipCode; 

    @Column(name = "location_source_value") 
    private String locationSourceValue; 

public Location() { 
} 

public Location(String address1, String address2, String city, String state, String zipCode) { 
    this.address1 = address1; 
    this.address2 = address2; 
    this.city = city; 
    this.state = state; 
    this.zipCode = zipCode; 
} 

public Long getId() { 
    return id; 
} 

public Long getId(String address1, String address2, String city, String state, String zipCode){ 
    return this.id; 
} 

public void setId(Long id) { 
    this.id = id; 
} 

public String getAddress1() { 
    return address1; 
} 

public void setAddress1(String address1) { 
    this.address1 = address1; 
} 

public String getAddress2() { 
    return address2; 
} 

public void setAddress2(String address2) { 
    this.address2 = address2; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getState() { 
    return state; 
} 

public void setState(String state) { 
    this.state = state; 
} 

public String getZipCode() { 
    return zipCode; 
} 

public void setZipCode(String zipCode) { 
    this.zipCode = zipCode; 
} 

public String getLocationSourceValue() { 
    return locationSourceValue; 
} 

public void setLocationSourceValue(String locationSourceValue) { 
    this.locationSourceValue = locationSourceValue; 
} 

}

は以下の通りです。

  • 新しいPersonレコードを挿入すると、addressLine1、addressLine2、city、state、zipcodeが提供されます。レコードが存在する場合はLocationテーブルをチェックしてください。存在する場合は、Locationテーブルからlocation_idを取得し、既存のlocation_idを使用して新しいPersonレコードを挿入します。存在しない場合は、Locationテーブルに新しいレコードを作成し、location_idを取得し、それを新しいPersonレコードのlocation_idとして使用します。

これは、適切なJPA Hibernateアノテーションを使用して達成できると思います。

現在、新しいPersonレコードを挿入するときは、Locationが存在する場合でもLocationテーブルに新しいレコードが作成されます。

助けてください。前もって感謝します!

答えて

0

equalsメソッドとhashCodeメソッドをオーバーライドしましたか?この方法では、テーブルの各行を識別するための追加を行います。アノテーションを適切に指定しましたが、Hibernateはこの行が存在するかどうかを判断できません。内部的にはHibernateはMapを使用しているので、equalsとhashCodeはあなたの問題を解決するはずです。

+0

返信いただきありがとうございます。例を挙げてこれを詳しく説明してください。 – coder1416

+0

このリンクをご覧ください https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/persistent-classes.html#persistent-classes-equalshashcode ここにあなたはなぜあなたが必要なのかを知ることができますこれらのメソッドとサンプルをオーバーライドします。 –

+1

@Sergiy Rezvan私は同じ問題に直面していますが、私は明確に何が指定されているかは分かりません。エンティティテーブルでどのような変更を行うべきかを詳しく説明してください。 – eccentricCoder

関連する問題