Java SpringDataJPA save OneToOne关系获取无法添加或更新子行:外键约束失败

Java SpringDataJPA save OneToOne关系获取无法添加或更新子行:外键约束失败,java,mysql,hibernate,jpa,spring-data-jpa,Java,Mysql,Hibernate,Jpa,Spring Data Jpa,我有USER(id)和CONTACT(USER_id,first,last)表。CONTACT.user_id是用户表的外键 在User.java中: @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; //bi-directional one-to-one association to Contact @OneToOne(mappedBy="user", cascade = CascadeType

我有USER(id)和CONTACT(USER_id,first,last)表。CONTACT.user_id是用户表的外键

在User.java中:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

//bi-directional one-to-one association to Contact
@OneToOne(mappedBy="user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)   
private Contact contact; 
在Contact.java中:

    @Id
//  @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="USER_ID")
    private int userId;

//bi-directional one-to-one association to User
@OneToOne(cascade = CascadeType.ALL )
@PrimaryKeyJoinColumn(name = "User_id")
private User user;
当我运行userRepository.save(user)时,我得到:

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`mysite`.`contact`, CONSTRAINT `fk_CONTACT_USER1` FOREIGN KEY (`USER_ID`) REFERENCES `user` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION)  

我做错了什么?谢谢

问题可能在于您的id生成策略(前提是您正确初始化了联系人)。 必须将用户对象插入数据库才能设置其id,但同时联系人需要此id才能成为有效对象。 它们必须发生在同一笔交易中

如果将JPA的日志记录级别切换为fine(在perstitance.xml中),则很可能会看到插入用户和联系人的顺序,但联系人的用户id为0

因此,a)确保在联系人中显式设置用户(如您所说,关系由联系人管理。b)在用户上设置联系人。c) 持久化(在一个事务中)。
根据您的JPA实现,它可能仍然不起作用(检查发出的查询,很可能会有insert on contact,然后是update)。将genration策略更改为TABLE,使用TABLE JPA获取下一个空闲ID,将其分配给对象,并进行插入,以便在插入之前“已知”。

能否显示包含
userRepository.save(user)
的代码部分?