gpt4 book ai didi

java - 使用 jpa 和 hibernate 在 orm.xml 中定义命名查询

转载 作者:IT老高 更新时间:2023-10-28 21:01:51 24 4
gpt4 key购买 nike

我正在尝试将我的命名查询放入我的 orm.xml(放入 META-INF 和 persistence.xml),但我的 orm.xml 似乎被 hibernate/jpa 忽略了。

当我尝试使用 em.createNamedQuery("myQuery") 创建命名查询时,它返回找不到该查询。

我使用注解,我想在 orm.xml 中外部化我的命名查询(仅此而已)。

这是我的 persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

<persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
<mapping-file>META-INF/orm.xml</mapping-file>

<class>com.mysite.Account</class>

<properties>
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="use_sql_comments" value="false" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MYSQLDialect" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />

<property name="hibernate.search.default.directory_provider" value="org.hibernate.search.store.FSDirectoryProvider" />
</properties>

</persistence-unit>

</persistence>

这是我的 orm.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" version="1.0">

<package>com.mysite</package>

<entity class="Account">
<sql-result-set-mapping name="nicknames">
<column-result name="nickname" />
</sql-result-set-mapping>
<table name="Account" />
<named-native-query name="myQuery" result-set-mapping="nicknames">
<query><![CDATA[select a.nickname from Account a]]>
</query>
</named-native-query>
</entity>
</entity-mappings>

我做错了什么?为什么我的 orm.xml 被忽略了?

谢谢

最佳答案

好的,我终于明白了!

我将我的 orm.xml 保存在 META-INF 目录中。当我将此文件移动到包含域对象的包中时(例如在我的示例中:com.mysite),不会忽略 orm.xml 并且全部运行。

我还需要更改映射文件(persistence.xml)中的路径:com/mysite/orm.xml

关于java - 使用 jpa 和 hibernate 在 orm.xml 中定义命名查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2373369/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com