我有一个war应用程序,它包含JPA2.1API和Hibernate4.3.0。Final(JPA2.1实现)使用Spring容器打包和引导,我想在JBoss EAP6.1中部署它。
我试图使用jboss-deployment-structure.xml排除JPA子系统,但我发现,即使我从standalone.xml中注释出JPA扩展和JPA子系统,并将JPA子系统排除放在jboss-deployment-structure.xml中(也排除了org.hibernate模块,以使用打包在应用程序中的hibernate),也不会运行JPA扫描器(如预期的那样),但只要war类(在我的例子中是Spring容器)引用javax.persistence类,就会从JBoss模块而不是war中提供的API jar。因此,很明显,我在war应用程序中的JBoss提供的API(2.0)及其实现(2.1)中发现了不匹配的异常。一个例外是,批注javax.persistence.table的索引相关属性不能被识别,因为这是JPA2.1中的一个添加,在JPA2.0中不可用
我可以通过将modules目录中的JPA2.0API替换为JPA2.1(并将module.xml指向新的2.1API jar),来解决这个问题,一切都很好。然而,我认为这不是正确的方法,因为这就像试图改变所有应用程序的服务器行为一样。
这是有意的JBoss类加载行为吗?所有规范API类(JBoss是其中的实现者)都将始终优先,无论使用的实现是什么,也无论我们告诉它使用应用程序中的特定API。我认为创建一个特定的符合规范的服务器,然后提供重写规范版本本身的方法有点矛盾,但是有没有一种方法可以在应用程序中干净地使用API和实现呢?
另一个选择是转移到Wildfly,它是JPA2.1实现,但我的问题是这在JBoss EAP6.1中是否完全可行?
我们找到了另一个解决方案。
您还可以在WAR的jboss-deployment-structure.xml中排除jpa子系统:
<exclude-subsystems>
<subsystem name="jpa" />
</exclude-subsystems>
<exclusions>
<module name="javaee.api" />
</exclusions>
问题内容: 我在Web应用程序中通过Hibernate使用JPA。这是两个实体(仅显示吸气剂): 如您所见,并称为“一对多”。 现在,我需要加载一个实例,删除部分或全部子代并保存更改。以下是对我不起作用的代码: 在上面的示例中未删除子实体。现在,我必须手动为每个孩子打电话。 有没有更简单的方法来管理子代? 请注意,我不想使用特定于Hibernate的功能,只能使用纯JPA。 问题答案: 对于JPA
使用粒子系统 Unity 使用一个组件实现粒子系统。在场景中放置粒子系统的常用方式是,添加一个预制的游戏对象(菜单:GameObject > Create General > Particle Syste),或者为一个现有的游戏对象添加粒子系统组件(菜单:Component > Effects > Particle System)。因为该组件相当复杂,所以检视视图被分割成数个可折叠的部分或 模块,
我想在JBoss7.1中使用Hibernate4.3的多租户特性。 通过在jboss-deployment-structure中添加以下行,我设法将其包含在我的war中 并在pom.xml中添加对hibernate核心和实体管理器的依赖项 这使得Hibernate4.3可以加载,但不幸的是,我出现了一个错误 这是因为在Hibernate4.3使用JPA2.1时加载了JPA2.0 从JBoss st
在mysql工作台中,我试图执行 这是一个查询,但是我收到了这个消息 错误代码:1175。您使用的是安全更新模式,并且您试图更新一个没有使用键列禁用安全模式的表,请在“首选项”中切换该选项-
我有以下作者类: 我的问题是这个测试用例中的最后一个断言失败了。如果我向作者添加一本书,它就会自动添加到图书存储库中。但是如果我从存储库中移除一本书,我如何从作者那里移除它呢?
问题内容: 我正在使用Entity Framework Code First开发WCF RESTful Web服务。 我的桌子上有很多列。我这样做是为了获得特定用户: 在此表上,有一个密码列,我不想返回此列。 如何从该选择中排除密码列? 问题答案: 在select语句中指定所需的每一列: