循环休眠 - 选择(一对多/多对一) - JAXRS

时间:2016-08-03 07:05:08

标签: java sql json hibernate jax-rs

我是Hibernate的新用户,我遇到了问题。当我想获取我的数据库的数据时,Hibernate会创建一个无限循环

我的要求:

Query q = s.createSQLQuery("SELECT resultat.*  FROM (SELECT r.* FROM application a JOIN configurationapplication ca ON a.id = ca.idApplication JOIN resultat r ON r.idApplication = a.id WHERE a.etat = 1 ORDER BY dateEnregistrement DESC) resultat group by resultat.idApplication").addEntity(ResultatBO.class);

结果:

Resultat ->
            Application 1 ->
                                List- Configuration 1 ->
                                                                   Application 1 ->
                                                                                         List- Configuration 1 ->
                                                                                                                            Application 1

我需要在一个应用程序中获取结果关联,在一个配置列表中获取应用程序关联,在一个应用程序中获取配置关联。这是一个循环......

这是我的配置Hibernate。

ApplicationBO

<class lazy="false"
    name="ApplicationBO" table="application">
    <id name="id" column="id">
        <generator class="increment" />
    </id>
    <property name="libelle" column="libelle" type="string" />
    <property name="etat" column="etat" type="boolean" />

    <bag name="lstConfApp" lazy="false" cascade="all">
        <key column="idApplication" />
        <one-to-many class="ConfigurationApplicationBO"/>
    </bag>
</class>

ConfigurationApplicationBO

<class lazy="true"
    name="ConfigurationApplicationBO"
    table="configurationapplication">
    <id name="id" column="id">
        <generator class="increment" />
    </id>
    <property name="hostID" column="host_object_id" type="int" />
    <property name="serviceID" column="service_object_id" type="int" />
    <property name="etat" column="etat" type="boolean" />
    <property name="libelle" column="libelle" type="text" />

    <many-to-one name="Application" column="idApplication" cascade="all"/>
</class>

ResultatBO

<class  lazy="false" name="ResultatBO"
    table="resultat">
    <id name="id" column="id">
        <generator class="increment" />
    </id>
    <property name="statut" column="statut" type="integer" />
    <property name="dateEnregistrement" column="dateEnregistrement" type="timestamp" />
    <property name="infoComplementaire" column="infoComplementaire" type="string" />

    <many-to-one name="application" column="idApplication"/>

</class>

我从不使用ConfigurationApplication.getApplication()关系。我保存/更新/删除数据时,我只有这个属性应用程序

我想得到一个结果,其中application.etat = 1并且至少有count(configuration.etat = 1)&gt; 0

您有任何想法解决此问题。 感谢。

抱歉我的英文不好:D。

修改1:

我在API JAXRS上公开的请求的结果。我有这个错误,对我来说问题是休眠。 org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: java.util.ArrayList[0]->ResultatBO["application"]->ApplicationBO_$$_javassist_1[‌​"handler"])

编辑2:

代码 @GET @Produces("application/json") public Response get() { List<ResultatBO> lstRes = ContextServiceImpl.getInstance().getStatusApplications( HibernateUtil.getSessionFactory().getCurrentSession()); GenericEntity<List<ResultatBO>> entity; entity = new GenericEntity<List<ResultatBO>>(lstRes) { }; return Response.ok(entity).build(); }

编辑3:

问题已解决。感谢名单。我使用旧版本的代码我忘了更新我的版本:s。

问题出在我的hbm.xml文件中,懒惰模式为true,我将值修改为false,然后添加注释 @JsonIgnore

0 个答案:

没有答案