Java 使用Hibernate在单独的jar中处理JPA@MappedSuperclass的问题
我的问题来自这样一个事实:我试图重用一个映射的超类,该超类包含一些基本字段,例如长Id。 此映射的超类如下所示:Java 使用Hibernate在单独的jar中处理JPA@MappedSuperclass的问题,java,hibernate,jpa,Java,Hibernate,Jpa,我的问题来自这样一个事实:我试图重用一个映射的超类,该超类包含一些基本字段,例如长Id。 此映射的超类如下所示: @MappedSuperclass public abstract class AbstractBaseEntity { protected Integer id; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "Id", nullable = fals
@MappedSuperclass
public abstract class AbstractBaseEntity {
protected Integer id;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "Id", nullable = false, unique = true, columnDefinition = "int")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
}
SELECT u from User u where u.organization = ?1
它放在一个罐子里,这样每个人都可以很容易地重复使用它。
显然,除了扩展它的实体之间确实存在关系,并且您尝试使用基于这些关系的查询来获取数据时,所有这些都可以完美地工作。
例子:
假设您的实体组织有一个或多个用户:
然后Hibernate抛出以下异常:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.example.Organization
这对我来说没有任何意义,这种查询不需要附加实体,因为它只需要它的id
但是,如果我从jar中取出AbstractBaseEntity并将其与Organization和User放在同一个项目中,那么它在分离的组织和所有
在我看来,这很像一只虫子。有关于如何解决这个问题的线索吗
另外,我已经尝试在persistence.xml中将AbstractBaseEntity显式指定为一个类,如下所述-奇怪但值得一试…不起作用只是猜测,但实体需要实现可序列化。看看这是否解决了您的问题。很抱歉,但我假设您无法从不同的编译单元提取MappedSuperclass。这是因为JPA提供者可能使用代码插装来访问实体字段 您是否尝试在自己的工作区中创建克隆类 德国方面的问候,
Thomas根据JPA规范,如果您在单独的jar中有JPA类,您应该将其添加到persistence.xml中,我不知道Hibernate是否需要,但您可以尝试一下。尝试将以下条目添加到persistence.xml entity.jar中
检查一下如何在jar文件标记中定义路径。我相信这只适用于实体,但我可能错了。值得一试。
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.example.Organization