Java 扩展JPA实体映射
我正在寻找一种扩展现有JPA映射的简单方法。其思路如下: 我有一个带有EJB3+JPA模块的EAR项目,该项目对ClassA进行了注释并映射到表class_a。但是我希望其他一些模块(另一个EJB模块)有ClassB,它为ClassA(extend?)添加了更多属性 我想到的一种方法是将这些附加字段添加到class_a表中,然后运行非HQL查询来检索该数据。这并不好,因为我必须手工做很多事情:类型映射、列映射等等 我做了简单的检查,但似乎无法在第二个模块中扩展ClassA(通过ClassB),因为它们使用不同的EntityManagerFactory,并且第二个模块看不到第一个模块中的一些类,反之亦然 我已经在persistence.xml中看到了标记。我需要类似的东西,但使用它需要在第一个模块中列出该文件,并且该文件必须存在(如果找不到,它将不会跳过)。是否有类似的东西可以放在扩展模块(第二个)上而不是可扩展模块(第一个)上Java 扩展JPA实体映射,java,hibernate,jpa,jakarta-ee,ejb-3.0,Java,Hibernate,Jpa,Jakarta Ee,Ejb 3.0,我正在寻找一种扩展现有JPA映射的简单方法。其思路如下: 我有一个带有EJB3+JPA模块的EAR项目,该项目对ClassA进行了注释并映射到表class_a。但是我希望其他一些模块(另一个EJB模块)有ClassB,它为ClassA(extend?)添加了更多属性 我想到的一种方法是将这些附加字段添加到class_a表中,然后运行非HQL查询来检索该数据。这并不好,因为我必须手工做很多事情:类型映射、列映射等等 我做了简单的检查,但似乎无法在第二个模块中扩展ClassA(通过ClassB),因
如果有办法在运行时扩展JPA映射,那就太好了。有这样的方法吗?我的问题还有其他解决方案吗?实施的解决方案如下。 我有一个jar和两个EJB模块:
@Entity
public class BaseEntity {
public long id;
@Id @GeneratedValue
public long getId() {...
... other variables, getters, setters ...
}
@Local
public interface EntitiyManagerWithExtendedEntitiesInterface {
public EntityManager getEntityManager;
}
persistence.xml
和。/path\u to\u first\u jar\u file.jar
行
@Entity
... discriminator annotations
public class ExtEntity extends BaseEntity {
... additional fields here
}
@Stateless
public class EntitiyManagerWithExtendedEntitiesBean implements EntitiyManagerWithExtendedEntitiesInterface {
@PersitenceContext
EntityManager em;
public EntityManager getEntityManager() {
return em;
}
}
EntitiyManager和ExtendedEntitiesInterface
interface的EJB)
@Stateless
public class getSomeEntity {
@EJB
EntitiyManagerWithExtendedEntitiesInterface ext;
EntityManager em;
@PostConstruct
public void injectEntityManager() {
em = ext.getEntityManager();
}
public void ejbInterfaceMethod() {
... method that uses em variable (EntityManager)
}
}