【发布时间】:2011-01-30 13:37:56
【问题描述】:
我们是 JPA 的新手,并试图建立一个非常简单的一对多关系,其中名为 Message 的 pojo 可以拥有一个由名为 GROUP_ASSOC 的连接表定义的整数组 ID 列表。这是 DDL:
创建表 "APP"."MESSAGE" (
"MESSAGE_ID" INTEGER NOT NULL 始终作为身份生成(从 1 开始,按 1 递增)
);
ALTER TABLE "APP"."MESSAGE" 添加约束 "MESSAGE_PK" PRIMARY KEY ("MESSAGE_ID");
创建表“APP”。“GROUP_ASSOC”(
"GROUP_ID" INTEGER NOT NULL,
“MESSAGE_ID”整数非空
);
ALTER TABLE "APP"."GROUP_ASSOC" 添加约束 "GROUP_ASSOC_PK" PRIMARY KEY ("MESSAGE_ID", "GROUP_ID");
ALTER TABLE "APP"."GROUP_ASSOC" 添加约束 "GROUP_ASSOC_FK" FOREIGN KEY ("MESSAGE_ID")
REFERENCES "APP"."MESSAGE" ("MESSAGE_ID");
这里是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;
}
}
我知道这是错误的,因为 groupIds 属性没有 @Column 映射到 GROUP_ASSOC.GROUP_ID,但希望这能说明我们正在尝试做的事情。当我们运行以下测试代码时,我们得到<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();
救命!
【问题讨论】: