2013-12-11 147 views
0

我有兩個SQL表:具有多對一關係的用戶和團隊以及具有FK的user_team表。我想用hibernate映射這個關係。在添加這個關係之前,一切都很好。@ManyToOne hibernate映射序列化

我的堆棧跟蹤:

SEVERE: Servlet.service() for servlet [dispatcher] in context with 
path [/gitsystem] threw exception [Request processing failed; nested exception 
is org.hibernate.type.SerializationException: could not deserialize] with root cause 
    java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) 
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
    at java.io.ObjectInputStream.<init>(Unknown Source) 
    at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:328) 
    at org.hibernate.internal.util.SerializationHelper$CustomObjectInputStream.<init>(SerializationHelper.java:318) 
    at org.hibernate.internal.util.SerializationHelper.doDeserialize(SerializationHelper.java:237) 
    at org.hibernate.internal.util.SerializationHelper.deserialize(SerializationHelper.java:306) 
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.fromBytes(SerializableTypeDescriptor.java:140) 
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:121) 
    at org.hibernate.type.descriptor.java.SerializableTypeDescriptor.wrap(SerializableTypeDescriptor.java:44) 
    at org.hibernate.type.descriptor.sql.VarbinaryTypeDescriptor$2.doExtract(VarbinaryTypeDescriptor.java:67) 
    at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:64) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257) 
    at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247) 
    at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:332) 
    at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2912) 
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1673) 
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1605) 
    at org.hibernate.loader.Loader.getRow(Loader.java:1505) 
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:713) 
    at org.hibernate.loader.Loader.processResultSet(Loader.java:943) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:911) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:312) 
    at org.hibernate.loader.Loader.loadCollection(Loader.java:2238) 
    at org.hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:65) 
    at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:674) 
    at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:85) 
    at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1849) 
    at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:549) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:234) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:545) 
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:124) 
    at org.hibernate.collection.internal.PersistentSet.iterator(PersistentSet.java:180) 
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:95) 
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.write(ReflectiveTypeAdapterFactory.java:89) 
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.write(ReflectiveTypeAdapterFactory.java:195) 
    at com.google.gson.internal.bind.ObjectTypeAdapter.write(ObjectTypeAdapter.java:107) 
    at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.write(TypeAdapterRuntimeTypeWrapper.java:68) 
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:96) 
    at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.write(CollectionTypeAdapterFactory.java:60) 
    at com.google.gson.Gson.toJson(Gson.java:593) 
    at com.google.gson.Gson.toJson(Gson.java:572) 
    at com.google.gson.Gson.toJson(Gson.java:527) 
    at com.google.gson.Gson.toJson(Gson.java:507) 
    at bg.glowacki.gitsystem.webapp.controller.AppController.listUsers(AppController.java:215) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745) 
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686) 
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920) 
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) 
    at com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

TeamEntity.java

package bg.glowacki.gitsystem.entities; 

import java.io.Serializable; 
import java.util.HashSet; 
import java.util.Set; 

import javax.persistence.CascadeType; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.JoinColumn; 
import javax.persistence.JoinTable; 
import javax.persistence.ManyToMany; 


@Entity 
@Table(name="teams") 
public class TeamEntity implements Serializable { 


private static final long serialVersionUID = -7520338084244844389L; 


private Long teamId; 


private String name; 

private UserEntity owner; 

private String description; 

private Set<UserEntity> members; 

public TeamEntity() { 
    super(); 
    members=new HashSet<UserEntity>(); 
} 

public TeamEntity(String name, UserEntity owner) { 
    super(); 
    this.name = name; 
    this.owner = owner; 
    members=new HashSet<UserEntity>(); 
} 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="teamid") 
public Long getTeamId() { 
    return teamId; 
} 

public void setTeamId(Long id) { 
    this.teamId = id; 
} 

@Column(name="name") 
public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

@Column(name="owner") 
public UserEntity getOwner() { 
    return owner; 
} 

public void setOwner(UserEntity owner) { 
    this.owner = owner; 
} 

@Column(name="description") 
public String getDescription() { 
    return description; 
} 

public void setDescription(String description) { 
    this.description = description; 
} 

@ManyToMany(cascade = { CascadeType.ALL }) 
@JoinTable(name = "user_team", joinColumns = { @JoinColumn(name = "teamid") }, inverseJoinColumns = { @JoinColumn(name = "userid") }) 
public Set<UserEntity> getMembers() { 
    return members; 
} 

public void setMembers(Set<UserEntity> members) { 
    this.members = members; 
} 




} 

UserEntity.java

package bg.glowacki.gitsystem.entities; 

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.List; 
import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.persistence.Transient; 
import javax.persistence.ManyToMany; 


@Entity 
@Table(name="users") 
public class UserEntity implements Serializable { 


private static final long serialVersionUID = 333094694988498458L; 

private Long userId; 

private String firstName; 

private String lastName; 

private String login; 

private String pass; 

private String email; 

private Set<TeamEntity> teams; 

private List<String> permissions; 

public UserEntity() { 
    permissions=new ArrayList<String>(); 
    permissions.add("test"); 
    teams=new HashSet<TeamEntity>(); 
} 

public UserEntity(Long id, String firstName, String lastName, String login, String pass) { 
    super(); 
    this.userId = id; 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.login = login; 
    this.pass = pass; 
    teams=new HashSet<TeamEntity>(); 
} 

public UserEntity(String firstName, String lastName, String login, String pass) { 
    super(); 
    this.firstName = firstName; 
    this.lastName = lastName; 
    this.login = login; 
    this.pass = pass; 
    teams=new HashSet<TeamEntity>(); 
} 

@Id 
@GeneratedValue(strategy=GenerationType.IDENTITY) 
@Column(name="userid") 
public Long getUserId() { 
    return userId; 
} 

public void setUserId(Long id) { 
    this.userId = id; 
} 

@Column(name="firstname") 
public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

@Column(name="lastname") 
public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

@Column(name="login",unique=true) 
public String getLogin() { 
    return login; 
} 

public void setLogin(String login) { 
    this.login = login; 
} 

@Column(name="pass") 
public String getPass() { 
    return pass; 
} 

public void setPass(String pass) { 
    this.pass = pass; 
} 

@Column(name="email") 
public String getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = email; 
} 

@ManyToMany(mappedBy = "members") 
public Set<TeamEntity> getTeams() { 
    return teams; 
} 

public void setTeams(Set<TeamEntity> teams) { 
    this.teams = teams; 
} 

@Transient 
public List<String> getPermissions() { 
    return permissions; 
} 

public void setPermissions(List<String> permissions) { 
    this.permissions = permissions; 
} 

public String toString(){ 
    return "Login: "+login; 
} 

} 

我的表:

用戶:

userid bigint (PK) 
firstname text 
lastname text 
login text 
pass text 
email text 

團隊:

teamid bigint (PK) 
name text 
owner bigint (FK to users) 
description 

user_team:

userid bigint (FK to users) 
teamid bigint (FK to teams) 

問題必須在某處映射多對多,但我不能找到它。

回答

0

試試這個。使用此代碼替換您@JoinTable註釋:

@JoinTable(name = "user_team", joinColumns = { 
    @JoinColumn(name = "fk_to_teams_from_user_team", referencedColumnName = "teamid")}, inverseJoinColumns = { 
    @JoinColumn(name = "fk_to_users_from_user_team", referencedColumnName = "userid")}) 
+0

感謝的答案,但問題仍然存在 – bglow

+0

可能您發佈表的結構?用戶,團隊和user_team –

+0

添加到主題 – bglow