@Entity
@Table(name = "PS")
@Data
@IdClass(PlanSponsorId.class)
public class PS implements Serializable {
private static final long serialVersionUID = -1685251075449473233L;
@Id
@Column(name = "PS_ID", columnDefinition = "INTEGER")
private Integer ps_id;
@Id
@Column(name = "LAST_UPDATE_DTS", columnDefinition = "DATETIME")
private Date lastUpateTimestamp;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({ @JoinColumn(name = "CFO_ID",referencedColumnName="CFO_ID"),
@JoinColumn(name = "CFO_LAST_UPDATE_DTS",referencedColumnName="LAST_UPDATE_DTS") })
private CFO cfo;
//other fields
}
@Data
@NoArgsConstructor
public class PlanSponsorId implements Serializable {
private static final long serialVersionUID = 2224235254147911360L;
private Date lastUpateTimestamp;
private Integer ps_id;
}
@Entity
@Table(name = "CFO")
@Data
@IdClass(value = CFOModelId.class)
public class CFO implements Serializable {
private static final long serialVersionUID = -1082267441376710907L;
@Id
@Column(name = "CFO_ID", columnDefinition = "CHAR(3)")
private String cfoIdentifier;
@Id
@Column(name = "LAST_UPDATE_DTS", columnDefinition = "DATETIME")
private Date lastUpateTimestamp;
@OneToMany(mappedBy="cfo")
private List<PS> ps;
//other fields
}
@Data
@NoArgsConstructor
public class CFOModelId implements Serializable {
private static final long serialVersionUID = -325079478600059751L;
private String cfoIdentifier;
private Date lastUpateTimestamp;
}
javax.persistence.EntityNotFoundException: Unable to find com.abc.CFO with id CFOModelId(cfoIdentifier=1 , lastUpateTimestamp=2019-12-30 01:36:08.773)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$JpaEntityNotFoundDelegate.handleEntityNotFound(EntityManagerFactoryBuilderImpl.java:162)
at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:285)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:180)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:309)
at org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept(ByteBuddyInterceptor.java:45)
当我只保留一个主键--无论是CFO_ID还是LAST_UPDATE_DTS,并完全删除Idclass时,它工作得非常好。这让我认为idclass有问题,但我找不到任何问题。有人能帮忙吗?
根据Hibernate文档,Hibernate似乎允许这样做,但它不符合JPA。
5.1.2.1.2. Multiple id properties without identifier type
Another, arguably more natural, approach is to place @Id on multiple properties of your entity. This approach is only supported by Hibernate (not JPA compliant) but does not require an extra embeddable component.
对于符合JPA的解决方案,您必须为此设置指定一个额外的@IDClass(或使用EmbeddedId):
引用:对同一个类中的多个字段使用@id
@Entity
@IdClass(ProjectId.class)
public class Project {
@Id int departmentId;
@Id long projectId;
}
在我处理的一个应用程序中,我们的日志中出现了一个问题已经有一段时间了。我们认为我们最近已经解决了这个问题,但不幸的是,它仍然存在,我已经没有办法解决它了。 问题是,当我们的用户加载某个页面时,我们在后台运行JPQL/HQL查询来检索显示所需的数据。出于某种原因,此查询有时会抱怨EntityNotFoundException,但并不一致。最近从我们正在查询的表中删除了一条记录时,似乎会发生这种情况。
我有以下实体: null null 但看起来像是黑客。 所以,1。我做错了什么?看起来,直接删除子实体 2是正确的。有没有更优雅的方法来处理这个? 可复制的例子:
问题内容: 尝试通过Invoice对象获取用户时出现javax.persistence.EntityNotFoundException错误 invoice.getUser()。getId() 错误如下 实体类如下(不包括getter和setter) 问题答案: 问题可能是直接实体不存在,也可能是该实体中的引用实体,通常用于EAGER访存类型,或optional = false。 尝试这个:
是否可以使用Hibernate ORM和OGM创建单个应用程序?我创建了一个应用程序,我在一个应用程序中遇到了多个JPA的问题。我通过更改两个JPA的名称解决了这个问题,但两个JPA之间仍然存在冲突。以下是例外情况: 原因:org.springframework.beans.factory.无法将类型[org.hibernate.internal.SessionFactoryImpl]的参数值转换
我有两个实体与双向OneTomany/ManyToone关系相连。 添加和删除实例是用Spring数据存储库完成的。移除看起来或多或少是这样的: 我稍微调试了一下,发现是一个Hibernate,它包含一个字段。这又是另一个,它仍然引用已删除的实体。我不知道为什么这个引用没有从快照中删除,但我怀疑这就是问题所在:我认为Hibernate试图第二次删除实体,因为它在快照中,而不在实际集合中。我找了很长
问题内容: 我有一个包含其他两个具有@ManyToOne关系的实体的实体。 如果我尝试保存一个具有另一个A记录的“ B_ID”和“ C_ID”的A实例,则会出现异常: org.hibernate.NonUniqueObjectException:具有相同标识符值的另一个对象已与会话关联 例如: B_ID和C_ID在我的模型中不是唯一的,并且(B_ID + C_ID)不是唯一的约束! 我能做什么?