【问题标题】:Composite PK null id generated生成的复合 PK null id
【发布时间】:2018-11-28 11:51:08
【问题描述】:

Spring Boot:2.0.2

休眠核心:5.2.17

方言:SQLServer2012方言

当尝试使用 JpaRepository save() 方法保存 DistributionActivities 实体时,操作失败并显示以下消息:

org.hibernate.id.IdentifierGenerationException: null id 生成 for:类 DistributionActivityEmails

父实体:

@Entity
@Table(name = "DistributionActivities")
public class DistributionActivities implements Serializable 
{   
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)    
    @Column(name ="ActivityID")
    private Long activityID;

    @OneToMany(cascade={CascadeType.ALL})
    @Fetch(FetchMode.JOIN)
    @JoinColumn(name="activityID", referencedColumnName="activityID")
    private Set<DistributionActivitiesEmails> distributionActivitiesEmails;
}

子实体:

@Entity
@Table(name = "DistributionActivitiesEmails ")
public class DistributionActivitiesEmails implements Serializable 
{
    @EmbeddedId
    private DistributionActivitiesEmailsId id;

    @Length(max = 50)
    private String EmailAdress;
}

复合PK:

@Embeddable
public class DistributionActivitiesEmailsId implements Serializable 
{
    @ManyToOne
    @JoinColumn(name="ActivityID")
    private DistributionActivities distributionActivities;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)    
    @Column(name ="ActivityEmailID")
    private Long activityEmailID;    
} 

【问题讨论】:

    标签: java hibernate spring-mvc jpa jakarta-ee


    【解决方案1】:

    根据@EmbeddedId javadoc,不支持在嵌入式 id 类中定义的关系映射。

    【讨论】:

    • 谢谢。复合 PK 是否有另一种方式可以同时具有父 id 和生成的 id ?
    • “在子类中也填充父对象变量以便将主键传递给子类”是什么意思我必须单独保存实体吗?第一个父实体 DistributionActivities 然后是子实体 DistributionActivitiesEmails ?
    • 在 DistributionActivitiesEmails 中采用 DistributionActivities(parent) 对象 OneToOne 关系。另请参阅:vladmihalcea.com/…
    • GeneratedValue 怎么样?如果我理解正确,我们不能在复合键中使用它。有什么选择吗?
    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 2011-11-28
    • 2023-03-23
    • 2012-06-09
    • 1970-01-01
    • 2010-12-23
    • 2013-08-13
    • 2015-06-17
    相关资源
    最近更新 更多