Java Can';无法使用hibernate获得正确的结果集

Java Can';无法使用hibernate获得正确的结果集,java,mysql,hibernate,jakarta-ee,many-to-many,Java,Mysql,Hibernate,Jakarta Ee,Many To Many,我有3个表、组、赋值和赋值组,它们在前面的表之间进行链接(多对多关系)。 我想做的是将idgroupes放入Assignment_has_groupes表中,以获取IDAssignment,然后能够根据其ID加载Assignment 我已经从Hibernate生成了我的类和映射,它没有创建类赋值组或hbm.xml文件,但这是正常的。 我的问题是,当我试图通过执行以下操作访问表以获取数据时 ArrayList<Integer> A = (Integer) session.createQ

我有3个表、组、赋值和赋值组,它们在前面的表之间进行链接(多对多关系)。 我想做的是将idgroupes放入Assignment_has_groupes表中,以获取IDAssignment,然后能够根据其ID加载Assignment

我已经从Hibernate生成了我的类和映射,它没有创建类赋值组或hbm.xml文件,但这是正常的。 我的问题是,当我试图通过执行以下操作访问表以获取数据时

ArrayList<Integer> A = (Integer) session.createQuery("FROM Assignements_has_groupes WHERE Groupes_idGroupes="+"'"+id+"'").list();

使用Hibernate处理任何数据库关系的最佳方法是让它为您服务。这必须在映射中指定,很难。在Hibernate中,您可以定义两种映射:通过xml或通过Java注释。在下一个示例中,我将使用注释,最后我将留下两个链接,解释这两种方法和更多示例

在您的具体案例中,我们讨论的是两个表之间的多对多关系。这意味着第一个表的每个元素可以包含第二个表的更多元素,反之亦然。从Java的角度来看,这是由集合定义的。在这种情况下,我将使用一套

public Assignment {

  // Your model.
  ...

  @ManyToMany
  @JoinTable(name = "Assignements_has_group ", joinColumns = { 
        @JoinColumn(name = "ASSIGNMENT_ID", nullable = false, updatable = false) }, 
        inverseJoinColumns = { @JoinColumn(name = "GROUP_ID", 
                nullable = false, updatable = false) })
  public Set<Group> groupes;

}
免责声明

请注意,此代码是动态编写的,未经测试,因此可能包含bug,可能无法工作。这只是一个粗略的想法。如果您有更多问题,请查看下面的链接,以获得有关此问题的更好教程

来源和更多示例

注释:


XML:

你能发布你的
实体吗?您期望的结果和得到的结果是什么?能否显示您的hibernate配置文件?参数“testGroup”代表什么?它代表您正在查找的组。事实上,该查询将返回已分配给“testGroup”的所有元素。我很高兴能帮助您!:)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
        <property name="hibernate.connection.username">root</property>
        <property name="connection.password"></property>

        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


                <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

        <!-- Echo all executed SQL to stdout -->
        <property name="show_sql">true</property>

        <!-- Drop the existing tables and create new one -->
        <property name="hbm2ddl.auto">update</property>

        <property name="hibernate.current_session_context_class">thread</property>

        <!-- Mention here all the model classes along with their package name -->
<!--        <mapping class="com.isep.metier.entities.Competences2"/> -->

        <mapping resource="com/isep/metier/Users.hbm.xml"/>
        <mapping resource="com/isep/metier/Absences.hbm.xml"/>
        <mapping resource="com/isep/metier/Assignements.hbm.xml"/>
        <mapping resource="com/isep/metier/Competences.hbm.xml"/>
        <mapping resource="com/isep/metier/Competencesgrp.hbm.xml"/>
        <mapping resource="com/isep/metier/Famillecompetences.hbm.xml"/>
        <mapping resource="com/isep/metier/Famillecompetencesgrp.hbm.xml"/>
        <mapping resource="com/isep/metier/Groupes.hbm.xml"/>
        <mapping resource="com/isep/metier/Notes.hbm.xml"/>
        <mapping resource="com/isep/metier/Remarques.hbm.xml"/>
    </session-factory>
</hibernate-configuration>
Hibernate: SELECT * FROM assignements_has_groupes WHERE Groupes_idGroupes='1'
juin 22, 2016 12:16:57 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: "Servlet.service()" pour la servlet GroupeEleve a généré une exception
java.lang.ClassCastException: java.util.ArrayList cannot be cast to java.sql.ResultSet
    at com.isep.metier.AssignementsUtil.AssignementByGrp(AssignementsUtil.java:48)
    at com.isep.controlleurs.GroupeEleve.doGet(GroupeEleve.java:49)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
public Assignment {

  // Your model.
  ...

  @ManyToMany
  @JoinTable(name = "Assignements_has_group ", joinColumns = { 
        @JoinColumn(name = "ASSIGNMENT_ID", nullable = false, updatable = false) }, 
        inverseJoinColumns = { @JoinColumn(name = "GROUP_ID", 
                nullable = false, updatable = false) })
  public Set<Group> groupes;

}
String hql = "from Assignment a where :myGroup in elements(a.groupes)";
List result = session.createQuery(hql)
.setString("myGroup", "testGroup")
.list();