我是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 。