具有外键关系的MySQL中JPA/Eclipselink问题持久化表
几乎有一整天我都在面对一个涉及JPA/Eclipselink和MySql的问题。在我的MySQL数据库中,我以以下方式配置了两个表:具有外键关系的MySQL中JPA/Eclipselink问题持久化表,mysql,jpa,eclipselink,foreign-key-relationship,persist,Mysql,Jpa,Eclipselink,Foreign Key Relationship,Persist,几乎有一整天我都在面对一个涉及JPA/Eclipselink和MySql的问题。在我的MySQL数据库中,我以以下方式配置了两个表: Table: Member memberID int(11) PK AI desiresID int(11) email firstName lastName password Table: MemberDesire desireID int(11) PK AI with ForeignKey constraint between Member and M
Table: Member
memberID int(11) PK AI
desiresID int(11)
email
firstName
lastName
password
Table: MemberDesire
desireID int(11) PK AI
with ForeignKey constraint between Member and MemberDesire
using Member.desireID and MemberDesire.desireID
在Eclipse中,我让这些表自动导入,它可以完美地识别链接。这两个类别如下所示:
@Entity
public class Member implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int memberID;
private String email;
private String firstName;
private String lastName;
private String password;
//bi-directional many-to-one association to MemberDesire
@ManyToOne(cascade=CascadeType.PERSIST)
@JoinColumn(name="desiresID")
private MemberDesire memberDesire;
以及:
持久化本身是通过以下方式完成的:
EntityManager em = Persistence
.createEntityManagerFactory("TestProject")
.createEntityManager();
EntityTransaction entityTransaction = em.getTransaction();
entityTransaction.begin();
member = new Member();
member.setFirstName(firstName);
member.setLastName(lastName);
member.setEmail(email);
member.setPassword(password);
MemberDesire desire = new MemberDesire();
member.setMemberDesire(desire);
List<Member> members = new ArrayList<Member>();
members.add(member);
desire.setMembers(members);
em.persist(member);
entityTransaction.commit();
em.close();
EntityManager em=持久性
.createEntityManagerFactory(“测试项目”)
.createEntityManager();
EntityTransaction EntityTransaction=em.getTransaction();
entityTransaction.begin();
成员=新成员();
成员。setFirstName(名字);
成员.setLastName(lastName);
成员。setEmail(电子邮件);
成员.setPassword(密码);
MemberDesire=新成员desire();
成员。设置成员愿望(愿望);
列表成员=新的ArrayList();
成员。添加(成员);
欲望。集合成员(成员);
em.persist(成员);
entityTransaction.commit();
em.close();
如果您能给我任何帮助,我将不胜感激!!
谢谢:)
SebastianMemberDesire未设置为生成主键,因此当您调用
MemberDesire desire = new MemberDesire();
member.setMemberDesire(desire);
它将导致无效的MemberDesire实体,该实体与该成员关联的pk为空。您可以将EclipseLink日志记录级别设置为Finest,以查看SQL和发出的参数,这可能有助于证明问题。如果试图将现有MemberDesire与新成员关联,则应使用em.find()api或实体查询,以便关联托管实例,而不是创建新对象 我还尝试在Eclipse中将关系配置为“单向”,只需将发布成员的部分也省略到MemberDesire实例中。。。但它也导致了同样的错误:(感谢您的回复。我解决了问题。我没有将Desire表的密钥生成器设置为“identity”。现在可以工作了:)
EntityManager em = Persistence
.createEntityManagerFactory("TestProject")
.createEntityManager();
EntityTransaction entityTransaction = em.getTransaction();
entityTransaction.begin();
member = new Member();
member.setFirstName(firstName);
member.setLastName(lastName);
member.setEmail(email);
member.setPassword(password);
MemberDesire desire = new MemberDesire();
member.setMemberDesire(desire);
List<Member> members = new ArrayList<Member>();
members.add(member);
desire.setMembers(members);
em.persist(member);
entityTransaction.commit();
em.close();
MemberDesire desire = new MemberDesire();
member.setMemberDesire(desire);