최대 절전 모드 주석 앱에서 이름이 지정된 쿼리를 어떻게 외부화합니까?

StackOverflow https://stackoverflow.com/questions/602397

  •  03-07-2019
  •  | 
  •  

문제

외부 파일에 대한 쿼리라는 HQL을 외부화하는 방법이 있습니까? 이름이 너무 많아서 사용합니다 @NamedQueries 그리고 @NamedQuery 내 엔티티 수업장에서 수업이 아프다.

여러 파일을 외부화하는 방법이 있습니까?

도움이 되었습니까?

해결책

쿼리를 넣을 수 있습니다 package-info.java 도메인 개체의 루트 패키지에서 클래스. 그러나 최대 절전 모드를 사용해야합니다 @NamedQueries 그리고 @NamedQuery 주석이 아닌 주석 javax.persistence.

예시 package-info.java 파일:

@org.hibernate.annotations.NamedQueries({
    @org.hibernate.annotations.NamedQuery(
        name = "foo.findAllUsers", 
        query="from Users") 
}) 

package com.foo.domain;

그런 다음 패키지를 귀하의 AnnotationConfiguration. 나는 스프링을 사용하므로 설정의 문제가 있습니다. annonatedPackages 재산:

<bean id="sessionFactory" 
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="annotatedClasses">
      <list>
      ...
      </list>
</property>
<property name="annotatedPackages">
  <list>
      <value>com.foo.domain</value>
  </list>
</property>

동일한 파일에 유형 및 필터 정의를 넣을 수도 있습니다.

다른 팁

주석 속성/속성 값을 컴파일 시간에 사용할 수 있어야한다고 생각하지 않습니다. 따라서 문자열은 어떤 종류의 프로세스에서 읽어야하는 파일에 외부화 할 수 없습니다.

나는 패키지 -info.java가 제공 할 수있는 것이 있었지만 아무것도 찾을 수없는 것이 있는지 찾으려고 노력했다.

조직을위한 대안 전략은 수업에서 쿼리를 상수로 저장하는 것일 수 있습니다.

엔티티 클래스에서 :

@NamedQuery(name="plane.getAll", query=NamedQueries.PLANE_GET_ALL)

그런 다음 쿼리 상수의 클래스를 정의하십시오.

public class NamedQueries {
    ...
    public static final String PLANE_GET_ALL = "select p from Plane p";
    ...
}

어쩌면 이것은 저자가 요구 한 내용이 아니었을 것입니다 (자바가 아닌 파일을 외부화하기 위해). 이것이 제가 해결 한 방법입니다.

1.) 내 응용 프로그램 컨텍스트 XML 파일에서 추가 mappingResources SessionFactory에

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
      <list>
        <value>META-INF/Country.hbm.xml</value>
      </list>
    </property>
    <property name="annotatedClasses">
        <util:list>
            <value>com.example.Country</value>
        </util:list>
    </property>
    <property name="hibernateProperties" ref="hibernateProperties" />
</bean>

그리고 그 나라에서 .hbm.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_2_0.xsd"
    version="2.0">

    <entity class="com.example.Country">

        <named-query name="countryFindByCode">
            <query><![CDATA[
                select c
                  from Country c
                 where c.code = :code
            ]]></query>
        </named-query>

        <named-query name="countryFindByName">
            <query><![CDATA[
                select c
                  from Country c
                 where c.name = :name
            ]]></query>
        </named-query>

    </entity>

</entity-mappings>

나는 이름이 지정된 쿼리를 정의하는 데 사용했지만 나머지 엔티티 구성은 주석에 있습니다.

어쩌면 그것은 누군가를 도울 것입니다.

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
      <list>
        <value>META-INF/Country.hbm.xml</value>
      </list>
    </property>
    <property name="annotatedCla 
                  from Country c
                 where c.name = :name
            ]]></query>
        </named-query>

    </entity>

</entity-mappings>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top