unterstützt. Wir sind neu in JPA und versuchen, eine sehr einfache Eins-zu-Viele-Beziehung einzurichten, in der ein Pojo namens Message eine Liste von Integer-Gruppen-IDs enthalten kann Join-Tabelle mit der Bezeichnung GROUP_ASSOC
. Hier ist der DDL:Der Feldtyp wird nicht von der angegebenen Persistenzstrategie "OneToMany"
CREATE TABLE "APP"."MESSAGE" ( "MESSAGE_ID" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) ); ALTER TABLE "APP"."MESSAGE" ADD CONSTRAINT "MESSAGE_PK" PRIMARY KEY ("MESSAGE_ID"); CREATE TABLE "APP"."GROUP_ASSOC" ( "GROUP_ID" INTEGER NOT NULL, "MESSAGE_ID" INTEGER NOT NULL ); ALTER TABLE "APP"."GROUP_ASSOC" ADD CONSTRAINT "GROUP_ASSOC_PK" PRIMARY KEY ("MESSAGE_ID", "GROUP_ID"); ALTER TABLE "APP"."GROUP_ASSOC" ADD CONSTRAINT "GROUP_ASSOC_FK" FOREIGN KEY ("MESSAGE_ID") REFERENCES "APP"."MESSAGE" ("MESSAGE_ID");
Hier wird die pojo:
@Entity
@Table(name = "MESSAGE")
public class Message {
@Id
@Column(name = "MESSAGE_ID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int messageId;
@OneToMany(fetch=FetchType.LAZY, cascade=CascadeType.PERSIST)
private List groupIds;
public int getMessageId() {
return messageId;
}
public void setMessageId(int messageId) {
this.messageId = messageId;
}
public List getGroupIds() {
return groupIds;
}
public void setGroupIds(List groupIds) {
this.groupIds = groupIds;
}
}
Ich weiß, das ist falsch, da es keine ist @Column
Zuordnung zu GROUP_ASSOC.GROUP_ID
für die Gruppenkenn Eigenschaft, aber hoffentlich das zeigt, was wir versuchen machen. Wenn wir den folgenden Testcode ausführen erhalten wir <openjpa-1.2.3-SNAPSHOT-r422266:907835 fatal user error> org.apache.openjpa.util.MetaDataException: The type of field "pojo.Message.groupIds" isn't supported by declared persistence strategy "OneToMany". Please choose a different strategy.
Message msg = new Message();
List groups = new ArrayList();
groups.add(101);
groups.add(102);
EntityManager em = Persistence.createEntityManagerFactory("TestDBWeb").createEntityManager();
em.getTransaction().begin();
em.persist(msg);
em.getTransaction().commit();
Hilfe!
Vielen Dank für Ihre Hilfe. Ich hätte erwähnen sollen, dass unsere Anwendung groupIds (in der Benutzeroberfläche) anzeigen muss und dass die Liste der groupId-Dateien letztendlich von uns abgefragt werden muss. Ich denke, es ist eine M: N-Beziehung, weil zwei Massagen die gleichen GroupIds haben können. – Lightbeard
Meine DDL ist meine beste Schätzung, wie diese Liste von Ganzzahlen effizient modelliert werden kann, damit es ein Problem damit geben kann (ich bin ein UI-Entwickler, kein DBA). Es erscheint mühsam, ein separates "GroupAssoc" Pojo zu erstellen, besonders wenn wir eine dritte Identitätsklasse erstellen müssen (da es einen zusammengesetzten Primärschlüssel hat), um nur eine Liste von GroupIds für eine bestimmte Nachricht abzufragen. – Lightbeard
@Robert Sie müssten keine dritte Entität erstellen, JPA abstrahiert die Implementierung auf Datenbankebene. Sie erhalten also eine Liste von 'GroupAssoc' und durchlaufen die Liste, um jede ID zu erhalten. –