在jpa中使用手动创建的表
我已经通过SQL手动创建了表在jpa中使用手动创建的表,jpa,jpa-2.0,Jpa,Jpa 2.0,我已经通过SQL手动创建了表 CREATE TABLE author( author_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20), author_phone_fk INT NULL, CONSTRAINT `author_phone_fk` FOREIGN KEY(author_phone_fk) REFERENCES phone(phone_id)); CREATE TABLE phone( phone_id INT AU
CREATE TABLE author(
author_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20),
author_phone_fk INT NULL,
CONSTRAINT `author_phone_fk`
FOREIGN KEY(author_phone_fk) REFERENCES phone(phone_id));
CREATE TABLE phone(
phone_id INT AUTO_INCREMENT PRIMARY KEY,
number VARCHAR(20));
我还上过课
@Entity
public class Phone {
@Id
@Column(name = "phone_id")
private int id;
private String number;
}
@Entity
public class Author {
@Id
@Column(name = "author_id")
private int id;
private String name;
@OneToOne(cascade = CascadeType.PERSIST)
@JoinColumn(name = "author_phone_fk")
private Phone phone;
}
在保存作者对象时,我遇到了一个异常
无法添加或更新子行:外键约束失败
(final_project
author
,CONSTRAINTauthor_phone\u fk
外键
(author\u phone\u fk
)参考资料phone
(phone\u id
)
我不知道如何纠正这个错误。Tnx
测试数据:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin();
Phone myPhone = new Phone("89198130228");
Author myAuthor = new Author("Alex", myPhone);
em.persist(myAuthor);
transaction.commit();
em.close();
堆栈跟踪:
休眠:在电话中插入(号码、电话号码)值(?,)
休眠:插入作者(姓名、作者电话、作者id)
线程“main”中的值(?,?)异常
javax.persistence.RollbackException:提交
交易地点
org.hibernate.internal.ExceptionConverterImpl.ConvertCommitteException(ExceptionConverterImpl.java:77)
在
org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:71)
在domain.TestAdvert.main(TestAdvert.java:44)处,由以下原因引起:
javax.persistence.PersistenceException:
org.hibernate.exception.ConstraintViolationException:无法
execute语句由以下原因引起:
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
无法添加或更新子行:外键约束失败
(final_project
author
,CONSTRAINTauthor_phone\u fk
外键
(author\u phone\u fk
)参考资料phone
(phone\u id
)
您可以尝试@JoinColumn(name=“author\u phone\u fk”,insertable=true,updateable=true)@Anil Agrawal,谢谢,但是这些注释在默认情况下是正确的。当您尝试添加一些数据时,会引发异常,但您不会发布您正在添加的数据、对象所处的生命周期状态或已经存在的数据。@Billy Frost,我已经更新了问题tnank yout,然后您需要相应地注释Phone.id字段,以便JPA知道它不应该传递id,而应该询问数据库它为id生成了哪个值。阅读文档。