幾乎整整一天,我都遇到了涉及JPA/Eclipselink和MySql的問題。在我的MySQL數據庫我配置以下列方式兩個表:在有外鍵關係的MySQL中JPA/Eclipselink問題持續存在表
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;
和:
@Entity
@Table(name="MemberDesires")
public class MemberDesire implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private int desireID;
private int maximumAge;
private int minimumAge;
//bi-directional many-to-one association to Member
@OneToMany(mappedBy="memberDesire")
private List<Member> members;
現在,當我試圖與包括MemberDesire堅持新成員出現以下錯誤數據庫:
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`test`.`member`, CONSTRAINT `desireKey` FOREIGN KEY (`desiresID`) REFERENCES `MemberDesires` (`desireID`) ON DELETE NO ACTION ON UPDATE NO ACTION)
Error Code: 1452
Call: INSERT INTO MEMBER (EMAIL, FIRSTNAME, LASTNAME, PASSWORD, desiresID) VALUES (?, ?, ?, ?, ?,)
bind => [5 parameters bound]
持續存在的本身就是這樣完成的:
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();
我將非常感謝您可以給我的任何幫助! 謝謝:)
塞巴斯蒂安
我也嘗試在Eclipse中將關係配置爲「單向」,簡單地將成員發佈的部分留給MemberDesire實例...但它導致同樣的錯誤:( – user1192475