Java JPA使用GenerationType.IDENTITY@onetomany Postgres子(多)表插入失败:父FK上的NOTNULL约束错误

Java JPA使用GenerationType.IDENTITY@onetomany Postgres子(多)表插入失败:父FK上的NOTNULL约束错误,java,jpa,one-to-many,identity,constraintexception,Java,Jpa,One To Many,Identity,Constraintexception,一支球队有很多球员。使用JPA/Hibernate。博士后9.1。GenerationType.IDENTITY(Postgres在int列上使用序列,如Oracle)。在一个新的insert中,当I em.persist()时,我在子表(在我的非常非常轻微的模糊代码中的player表…名称被更改以保护无辜者)上得到了一个NOTNULL错误。错误信息如下 父表 @Entity @Table(name = "team") public class Team implements Serializa

一支球队有很多球员。使用JPA/Hibernate。博士后9.1。GenerationType.IDENTITY(Postgres在int列上使用序列,如Oracle)。在一个新的insert中,当I em.persist()时,我在子表(在我的非常非常轻微的模糊代码中的player表…名称被更改以保护无辜者)上得到了一个NOTNULL错误。错误信息如下

父表

@Entity
@Table(name = "team")
public class Team implements Serializable {
    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column(name = "teamid")
    private Long teamid;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "teamid", fetch = FetchType.LAZY)
    private Collection<Player> playerList;
persistence.xml的良好度量:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  <persistence-unit name="ELS_Soulard_PU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/ElsDev1Pool</jta-data-source>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties/>
  </persistence-unit>
</persistence>
请注意,如果我将玩家排除在等式之外,即在“Team”类中,玩家属性的值设置为null(我注释掉将玩家列表添加到属性的代码),则数据将成功插入到Team表中。问题全在球员身上。(只要问问多伦多枫叶店的老板就知道了。:p)

是否是GenerationType.IDENTITY导致了问题?i、 e.在事务结束之前,不会返回父表中的teamid,因此不能将其作为FK放在player表中?如果是这样,除了使用不同的一代类型之外,还有什么补救措施吗?我喜欢使用数据库序列(更多控制imho)

序列生成类型更好还是相同的问题?但我相信一定有办法做到这一点。不是吗?:/


将ID更改为如下所示(即让hibernate生成):

现在我得到了这个错误:

INFO: EXCEPTION CLASS NAME: javax.persistence.PersistenceException
INFO: THROWABLE CLASS NAME: org.hibernate.id.IdentifierGenerationException

所以这里唯一的错误是我对表连接和JPA类型ORM工作原理的理解(我以前与MyBatis合作过,所以仍在学习JPA)。事实证明,即使直觉上你会认为我可以向我的团队类添加数据,包括我的球员的arraylist,然后将其持久化,但你不能。您必须首先坚持团队,然后依次将团队添加到每个玩家,然后一次坚持一个。所以从本质上说,这段代码没有错。问题出在椅子和电脑之间。:/自那以后,它被纠正了

INFO: THROWABLE INFO: org.postgresql.util.PSQLException: ERROR: null value in column "teamid" violates not-null constraint
INFO: Team Controller persistence exception THROWABLE MESSAGE: could not insert: [com.mydomainblahblahblah.persistence.entity.Player]
@Id
@Column(name = "teamid")
private Long teamid;
INFO: EXCEPTION CLASS NAME: javax.persistence.PersistenceException
INFO: THROWABLE CLASS NAME: org.hibernate.id.IdentifierGenerationException