たとえば 給与の明細(多)と給与(一)の関連がある場合。
たとえばこんなコードだったとします。
package nu.mine.kino.examples.entity; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; /** * @author Masatomi KINO * @version $Revision$ */ @Entity @Table(name="SALARY_DETAIL") public class SalaryDetail { @Id @GeneratedValue private Integer id; @Column(name = "PARENT_ID") private Integer parentId; @Column(name = "DETAIL_CODE") private Integer detailCode; private Long value; //Getter/Setterは省略。 }
package nu.mine.kino.examples.entity; import java.util.Date; import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Temporal; import javax.persistence.TemporalType; /** * @author Masatomi KINO * @version $Revision$ */ @Entity public class Salary { @Id @GeneratedValue private Integer id;
@Temporal(TemporalType.DATE) @Column(name = "SALARY_DATE") private Date salaryDate; //Getter/Setterは省略。 }
この場合は、明細側のクラスに@ManyToOne?の関連を設定します。やり方は、もともとフィールドにFKがあるので、それをコメントアウト。そのフィールドのGetter/Setterも削除。代わりに、親クラスのフィールドとGetter/Setterを以下のように作成する。
@Entity @Table(name = "SALARY_DETAIL") public class SalaryDetail { @Id @GeneratedValue private Integer id; // @Column(name = "PARENT_ID") // private Integer parentId; @ManyToOne @JoinColumn(name = "PARENT_ID") private Salary salary;
public Salary getSalary() { return salary; } public void setSalary(Salary salary) { this.salary = salary; } .... }
この記事は
現在のアクセス:4922