كيف يمكنني تخصيص الاستعلامات المسمى في تطبيق التعليقات التوضيحية السباتية؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

هل هناك طريقة لإجراء استفسارات خارجي اسمه HQL إلى ملف خارجي. لدي الكثير من الاستفسارات المسماة واستخدام @NamedQueries و @NamedQuery على رأس فصول الكيانات الخاصة بي.

هل هناك وسيلة لنضجها إلى عدة ملفات؟

هل كانت مفيدة؟

المحلول

يمكنك وضع الاستعلامات في package-info.java الفصل ، في ، على سبيل المثال ، حزمة الجذر لكائنات المجال الخاصة بك. ومع ذلك ، يجب أن تستخدم Hibernate الخاصة @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>

يمكنك أيضًا وضع تعريفات النوع والتصفية في نفس الملف أيضًا.

نصائح أخرى

لا أعتقد أن هذا ممكن حيث يجب أن تكون قيم السمة/خاصية التعليقات التوضيحية متوفرة في وقت الترجمة. لذلك ، لا يمكن تمييز السلاسل إلى ملف يحتاج إلى قراءته بواسطة نوع من العملية.

حاولت أن أجد ما إذا كان هناك شيء قد يكون هناك حزمة-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