Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Hibernate在单独的jar中处理JPA@MappedSuperclass的问题_Java_Hibernate_Jpa - Fatal编程技术网

Java 使用Hibernate在单独的jar中处理JPA@MappedSuperclass的问题

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

我的问题来自这样一个事实:我试图重用一个映射的超类,该超类包含一些基本字段,例如长Id。 此映射的超类如下所示:

@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