Ответ 1
Я не использую NetBeans, поэтому я ничего не могу сказать о его инструментах отображения.
Для отображения составного ключа есть несколько вариантов. Вы можете
-
Определите отдельный объект
@Embeddable
с полями PK и используйте его как@EmbeddedId
в вашем классе@Entity
@Embeddable public class MyCompositePK { @Column private String fieldA; @Column private String fieldB; } @Entity public class MyBean { @EmbeddedId private MyCompositePK id; @Column private String fieldC; }
-
Определите неотображенное POJO с полями PK и используйте его как
@IdClass
в@Entity
.@Entity @IdClass(value=ClassAB.ClassABId.class) public class ClassAB implements Serializable { private String idA; private String idB; @Id @Column(name="ID_A") public String getIdA(){ return idA; } public void setIdA(String idA){ this.idA = idA; } @Id @Column(name="ID_B") public String getIdB(){ return idB; } public void setIdB(String idB){ this.idB = idB; } static class ClassABId implements Serializable { private String idA; private String idB; public String getIdA(){ return idA; } public void setIdA(String idA){ this.idA = idA; } public String getIdB(){ return idB; } public void setIdB(String idB){ this.idB = idB; } // implement equals(), hashcode() } }
В этом примере
ClassABId
является статическим внутренним классом только для удобства.
Эти параметры также объясняются в Pascal Thivent превосходным ответом на этот вопрос: Как сопоставить составной ключ с Hibernate?.
В этом связанном вопросе обсуждаются различия между этими подходами: Какую нотацию следует использовать: @IdClass или @EmbeddedId. Обратите внимание, что декларация полей дублируется с помощью подхода @IdClass
.
Во всяком случае, я не думаю, что есть альтернатива созданию двух классов. Вот почему я задал этот вопрос: Сопоставление класса, состоящего только из составного ПК без @IdClass или @EmbeddedId. Кажется, для этой функции существует функция спящего режима.
В качестве побочного примечания, если у вас есть контроль над структурой базы данных, вы можете также рассмотреть возможность исключения составных ключей. Есть несколько причин для этого.