我有一个使用JPA的应用程序。在应用程序中我有一个类
@Entity
public class Root{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
...
}
在我指定的persistence.xml
<persistence ...>
<persistence-unit ...>
<exclude-unlisted-classes>false</exlude-unlisted-classes>
</persistence-unit>
</persistence>
除此之外我还有几个Jar-Files在运行时作为插件加载。这些插件可能具有扩展Root
类的类,也可以是实体。
加载文件可以正常工作,但在保持不变时,我会收到IllegalArgumentException
消息Subclass is not a known Entity type
。我读到了关于CompositePersistenceUnits的内容,它实际上不是一个解决方案,因为我必须事先指定所有的jar文件,这对于基于插件的系统来说是不可能的。
我的问题现在是: 我可以动态地将Jar-Files添加到复合持久性单元吗?或者我甚至可以将新实体添加到非复合的持久性单元中?
答案 0 :(得分:1)
最好将所有持久化类放在同一个组件中,或让每个组件都有自己独立的持久性单元。
您可能希望调查EclipseLink外部元数据支持,该支持允许在运行时刷新/扩展持久性单元,
http://www.eclipse.org/eclipselink/documentation/2.5/solutions/metadatasource.htm
您还可以使用EclipseLink Session API在运行时添加描述符或项目。