サーチ…


パラメーター

注釈目的
@TableGenerator ジェネレータが見つかるジェネレータ名とテーブル名を指定します。
@GeneratedValue 生成戦略を指定し、ジェネレータの名前を参照します。
@OneToOne 従業員と机の間の1対1の関係を指定します。ここで、従業員は関係の所有者です
mappedBy この要素は関係の裏側にあります。これにより、双方向関係

従業員と机の1対1の関係

従業員と机の間に1対1の双方向関係があるとします。

Employee.java

@Entity
public class Employee {

    @TableGenerator(name = "employee_gen", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 100)
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "employee_gen")
    private int idemployee;
    private String firstname;
    private String lastname;
    private String email;

    @OneToOne
    @JoinColumn(name = "iddesk")
    private Desk desk;

    // getters and setters    
}

Desk.java

@Entity
public class Desk {

    @TableGenerator(table = "id_gen", name = "desk_gen", pkColumnName = "gen_name", valueColumnName = "gen_value", allocationSize = 1)
    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "desk_gen")
    private int iddesk;
    private int number;
    private String location;
    @OneToOne(mappedBy = "desk")
    private Employee employee;

    // getters and setters    
}

テストコード

/* Create EntityManagerFactory */
    EntityManagerFactory emf = Persistence
            .createEntityManagerFactory("JPAExamples");

    /* Create EntityManager */
    EntityManager em = emf.createEntityManager();

    Employee employee;

    employee = new Employee();
    employee.setFirstname("pranil");
    employee.setLastname("gilda");
    employee.setEmail("sdfsdf");

    Desk desk = em.find(Desk.class, 1); // retrieves desk from database
    employee.setDesk(desk);

    em.persist(employee);

    desk = em.find(Desk.class, 1); // retrieves desk from database
    desk.setEmployee(employee);
    System.out.println(desk.getEmployee());

データベースダイアグラムを以下に示します。 ここに画像の説明を入力

  • @JoinColumnアノテーションは、ジョイン・コラムを含むテーブルにマップされるエンティティのマッピングを行います。関係の所有者。私の場合、EmployeeテーブルにはJoinカラムがあり、 @ JoinColumnはEmployeeエンティティのDeskフィールドにあります。
  • mappedBy要素は、関係の反対側のエンティティの@OneToOne関連で指定する必要があります。すなわち、データベースのアスペクトで結合列を提供しないエンティティ。私たちの場合、デスクは逆のエンティティです。

完全な例はここにあります



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow