在jpa中使用手动创建的表

在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

我已经通过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 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
,CONSTRAINT
author_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
,CONSTRAINT
author_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生成了哪个值。阅读文档。