Hibernateで1対多アノテーションの設定方法を教えてください

Hibernate で、アノテーションによって 1 対多の関係を構成するには、@OneToMany アノテーションを使用します。以下はその一例です。

顧客クラスと注文クラスがあり、1人の顧客は複数の注文を持つ場合、顧客クラスで次のように1対多の関係を設定する。

@Entity
@Table(name = "customers")
public class Customer {

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

    private String name;

    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
    private Set<Order> orders;

    // 省略getter和setter方法
}

オーダークラスで多対一リレーションを次のように設定します。

@Entity
@Table(name = "orders")
public class Order {

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

    private String item;

    @ManyToOne
    @JoinColumn(name = "customer_id")
    private Customer customer;

    // 省略getter和setter方法
}

Customer クラスの @OneToMany アノテーションで指定された mappedBy 属性「customer」は、関連する Order クラスの customer 属性がリレーションシップを管理していることを表します。また、cascade 属性を使用してカスケード操作を設定し、顧客を削除すると関連する注文も一緒に削除されます。

Orderクラスに@ManyToOneアノテーションを使用し、JoinColumnプロパティを「customer_id」に指定することで、データベースにおける外部キー列名が「customer_id」であることを指定している。これによりCustomerクラスとOrderクラスの間に1対多の関係が確立される。

上記サンプルは、@Entity、@Table、@Id、@GeneratedValueアノテーションを使ってエンティティクラスと主キー生成戦略を設定していますが、これらのアノテーションはHibernateの基本アノテーション設定です。まだ未習の場合は、事前に学習を済ませることをおすすめします。

bannerAds