Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有外键关系的MySQL中JPA/Eclipselink问题持久化表_Mysql_Jpa_Eclipselink_Foreign Key Relationship_Persist - Fatal编程技术网

具有外键关系的MySQL中JPA/Eclipselink问题持久化表

具有外键关系的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

几乎有一整天我都在面对一个涉及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 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();
如果您能给我任何帮助,我将不胜感激!! 谢谢:)


Sebastian

MemberDesire未设置为生成主键,因此当您调用

 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);