gpt4 book ai didi

java - hibernate 异常;找到同一集合的两个表示

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:55 24 4
gpt4 key购买 nike

在使用 Hibernate 处理 Spring 3 MVC 项目时,我们遇到了一个恼人的错误。我们正在创建一个拼车应用程序。人们可以添加路线(使用 jQuery 的 Gmap 3 插件)并可以向他们的路线添加路标。在数据库中,航路点具有路线的外键。尝试更新路线时(添加/删除航路点并重新保存路线),我们收到“找到同一集合的两个表示”错误。我们已经研究了 Internet,但大多数主题都在谈论 Play 框架(我们不使用它),而且他们还谈论作为映射方法的注释(而我们使用 XML 映射)。有谁知道我们如何解决这个问题?或者这是 Hibernate 本身的问题?

澄清问题的一些代码:

路由类的XML映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="be.kdg.teamb.model.pojo.Route" table="route">
<id name="routeid" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property name="departure" not-null="true"/>
<property name="latitude_departure" />
<property name="longtidude_departure" />
<property name="destination" not-null="true"/>
<property name="latitude_destination" />
<property name="longtidude_destination" />
<property name="departureTime" not-null="true" type="java.util.Date" />
<property name="startDate" not-null="true" type="java.util.Date"/>
<property name="endDate" type="java.util.Date" />
<many-to-one name="driver" column="userid" not-null="true" cascade="save-update" />
<many-to-one name="defaultCar" column="carid" not-null="true" cascade="save- update"/>
<set name="waypoints" cascade="all,delete-orphan" inverse="true">
<key column="routeid" on-delete="cascade" />
<one-to-many class="be.kdg.teamb.model.pojo.Waypoint" />
</set>
<set name="rides" cascade="all,delete-orphan" inverse="true">
<key column="routeid" on-delete="cascade" />
<one-to-many class="be.kdg.teamb.model.pojo.Ride"/>
</set>
<set name="rules" cascade="all,delete-orphan" inverse="true">
<key column="routeid" on-delete="cascade" />
<one-to-many class="be.kdg.teamb.model.pojo.RouteRule" />
</set>
</class>
</hibernate-mapping>

航路点类的 XML 映射:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="be.kdg.teamb.model.pojo.Waypoint" table="waypoint">
<id name="waypointid" type="java.lang.Integer">
<generator class="identity"/>
</id>
<property name="latitude" not-null="true" />
<property name="longtidude" not-null="true" />
<property name="address" not-null="true" />
<many-to-one name="route" column="routeid" not-null="true" cascade="all" />
</class>
</hibernate-mapping>

我们服务中的代码:

@Override
@Transactional
public void add(String departureCoordinates, String departure, String destinationCoordinates, String destination, String coordinatesWaypoints, String namesWaypoints, String user, int carID, Date beginDate, Date endDate, Date departureTime) {

User usr = userDao.get(user);

Route route = new Route();

//formaat: latitude-longtitude
String[] coords = departureCoordinates.split(",");

String departureLatitude = coords[0];
String departureLongtitude = coords[1];

coords = destinationCoordinates.split(",");

String destinationLatitude = coords[0];
String destinationLongtitude = coords[1];

// add route information
route.setDeparture(departure);
route.setLatitude_departure(departureLatitude);
route.setLongtidude_departure(departureLongtitude);

route.setDestination(destination);
route.setLatitude_destination(destinationLatitude);
route.setLongtidude_destination(destinationLongtitude);

route.setDriver(usr);
route.setDefaultCar(carDao.get(carID));

route.setStartDate(beginDate);
route.setDepartureTime(departureTime);
route.setEndDate(endDate);

if (coordinatesWaypoints != null && coordinatesWaypoints.trim().length() != 0) {
String[] waypoints = coordinatesWaypoints.split(";;;");
String[] waypointNames = namesWaypoints.split(";;;");

int i = 0;

for (String waypointAddress : waypointNames) {
String[] waypointCoord = waypoints[i].split(",");

String waypointLat = waypointCoord[0];
String waypointLon = waypointCoord[1];

Waypoint waypoint = new Waypoint();

waypoint.setAddress(waypointAddress);
waypoint.setLatitude(waypointLat);
waypoint.setLongtidude(waypointLon);

route.addWaypoint(waypoint);

i++;
}
}
else{
for (Waypoint waypoint : route.getWaypoints()) {
waypointDao.delete(waypoint);
}


}

routeDao.save(route);

socialMediaService.post(user, "http://localhost:8080/route/detail/" + route.getRouteid(), "Posted a new route! From " + route.getDeparture() + " to " + route.getDestination(), "Posted new route!", "Carpool teamb", "Posted a new route! From " + route.getDeparture());

}

错误堆栈跟踪:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: Found two representations of same collection: be.kdg.teamb.model.pojo.Route.waypoints
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
root cause

org.hibernate.HibernateException: Found two representations of same collection: be.kdg.teamb.model.pojo.Route.waypoints
org.hibernate.engine.Collections.processReachableCollection(Collections.java:175)
org.hibernate.event.def.FlushVisitor.processCollection(FlushVisitor.java:60)
org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:122)
org.hibernate.event.def.AbstractVisitor.processValue(AbstractVisitor.java:83)
org.hibernate.event.def.AbstractVisitor.processEntityPropertyValues(AbstractVisitor.java:77)
org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:165)
org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:58)
org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1261)
org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:890)
be.kdg.teamb.model.dao.impl.UserDaoImpl.get(UserDaoImpl.java:31)
be.kdg.teamb.model.service.impl.UserServiceImpl.get(UserServiceImpl.java:222)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
$Proxy33.get(Unknown Source)
be.kdg.teamb.model.service.impl.SocialMediaServiceImpl.post(SocialMediaServiceImpl.java:36)
be.kdg.teamb.model.service.impl.RouteServiceImpl.update(RouteServiceImpl.java:202)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
$Proxy40.update(Unknown Source)
be.kdg.teamb.controller.RouteController.edit(RouteController.java:258)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:212)
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:900)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:827)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:311)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:101)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:323)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:173)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.25 logs.

Apache Tomcat/7.0.25

我们还尝试添加 route.getWaypoints().clear(); 但这似乎没有帮助。

有什么建议吗?如果您想了解更多信息,请直接询问。

最佳答案

Waypoint类的映射中,

<many-to-one name="route" column="routeid" not-null="true" cascade="all" />

只需删除 cascade="all" 并按如下方式修改您的映射,

<many-to-one name="route" column="routeid" not-null="true"  />

尝试执行代码。

您也可以引用博文here或 hibernate 论坛上的帖子 here .阅读here关于 hibernate 中cascade选项的使用。

关于java - hibernate 异常;找到同一集合的两个表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9598890/

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