gpt4 book ai didi

java - hibernate 无法获得正确的结果集

转载 作者:行者123 更新时间:2023-11-28 23:29:11 26 4
gpt4 key购买 nike

我有 3 个表,Groupes、Assignements 和 Assignements_has_group,它在前面的表之间建立链接(多对多关系)。我想要做的是将 idgroupes 放入 Assignement_has_groupes 表中以获取 idAssignements,然后能够根据其 ID 加载分配。

我已经从 Hibernate 生成了我的类和映射,它还没有创建类 Assignements_has_group 或 hbm.xml 文件,但这是正常的。我的问题是当我试图访问表以通过执行

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

我收到一条错误消息,指出 Assignements_has_groupes 未映射。

所以我尝试通过 native SQL 访问该表,但我无法获得正确的结果集,我的代码是:

ArrayList AS = new ArrayList<Integer>();
ResultSet AB= (ResultSet)session.createSQLQuery("SELECT * FROM assignements_has_table WHERE Groupes_idGroupes="+"'"+id+"'").list();
tx.commit();
int x=0;
while(AB.next()){
int c =(int)AB.getInt(x);
AS.add(c);
x++;
}

我无法将我的结果集正确放入 arrayList哪种解决方案最好,怎么做?

编辑: hibernate 配置

<?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>

最后我想要的是一个 int idAssignement 的 ArrayList,使我能够正确加载分配

现在完整的堆栈错误是:

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)

最佳答案

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

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

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;

}

基本上,这将告诉 Hibernate 表 Assignements_has_group 在 ASSIGNMENT_ID 和 GROUP_ID 列上映射了多对多关系。此外,如果关系表不包含空元素并且您不想更新该表的记录,则可能需要设置 nullable = false 和 updatable = false。您必须对分配模型和组模型执行此操作。

完成后,要获取数据,您不会使用连接表,而是使用 Groupes 和 Assignments 表。下面是一个 HQL 查询示例,它获取组“testGroup”的所有分配:

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

免责声明

请注意,此代码是即时编写的并且未经测试,因此它可能包含错误并且可能无法运行。这只是给出一个大概的想法。如果您有更多问题,请查看下面的链接以获得更好的教程。

来源和更多示例

注释:http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example-annotation/

XML:http://www.mkyong.com/hibernate/hibernate-many-to-many-relationship-example/

关于java - hibernate 无法获得正确的结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37964316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com