org.hibernate.TypeMismatchException: Die id von der falschen Art
Ich arbeite zum ersten mal mit MyEclipse For Spring, die den Ruhezustand unterstützen.
Folgenden der relevante Teil der mysql-db:
CREATE TABLE
`delidete`.`DatiGeneraliVistoContabile` (
`DatiGeneraliId` int NOT NULL, <---- P.K., Foreign key to table Datigenerali
`SoggettiCodice` int NOT NULL, <---- P.K., Foreign key to table Soggetti
`DGVCDataInizio` date NOT NULL,
`DGVCDataFine` date) ;
CREATE TABLE
`delidete`.`DatiGeneraliParereTecnico` (
`DatiGeneraliId` int NOT NULL, <---- P.K., Foreign key to above table (DatigeneraliId)
`TecnicoParereCodice` int NOT NULL, <---- P.K., Foreign key to above table (SoggettiCodice)
`DGTPDescrizione` varchar (255) NOT NULL,
`DGTPDataInizio` date NOT NULL,
`DGTPDataFine` date) ;
ALTER TABLE `delidete`.`DatiGeneraliVistoContabile`
ADD PRIMARY KEY (`DatiGeneraliId`, `SoggettiCodice`) ;
ALTER TABLE `delidete`.`DatiGeneraliParereTecnico`
ADD CONSTRAINT `IDatiGeneraliParereTecnico`
FOREIGN KEY (`DatiGeneraliId`, `TecnicoParereCodice`)
REFERENCES `DatiGeneraliVistoContabile` (`DatiGeneraliId`, `SoggettiCodice`) ;
ALTER TABLE `delidete`.`DatiGeneraliVistoContabile`
ADD CONSTRAINT `IDatiGeneraliVistoContabile2`
FOREIGN KEY (`DatiGeneraliId`)
REFERENCES `DatiGenerali` (`DatiGeneraliId`) ;
ALTER TABLE `delidete`.`DatiGeneraliVistoContabile`
ADD CONSTRAINT `IDatiGeneraliVistoContabile1`
FOREIGN KEY (`SoggettiCodice`)
REFERENCES `Soggetti` (`SoggettiCodice`) ;
Diese sind die zwei generierten Klassen:
Datigeneralivistocontabile:
@IdClass(delidete.domain.DatigeneralivistocontabilePK.class)
@Entity
@Table(catalog = "delidete", name = "datigeneralivistocontabile")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "DeliDete/delidete/domain", name = "Datigeneralivistocontabile")
public class Datigeneralivistocontabile implements Serializable
{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name = "DatiGeneraliId", referencedColumnName = "DatiGeneraliId", nullable = false, insertable = false, updatable = false)})
@XmlTransient
Datigenerali datigenerali;
@Column(name = "DatiGeneraliId", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@XmlElement
Integer datiGeneraliId;
----------------------------------------------------------------------
//don't know why MyEclipse put this link into this class
@OneToOne(mappedBy = "datigeneralivistocontabile", fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
Datigeneralipareretecnico datigeneralipareretecnico;
----------------------------------------------------------------------
@Temporal(TemporalType.DATE)
@Column(name = "DGVCDataFine")
@Basic(fetch = FetchType.EAGER)
@XmlElement
Calendar dgvcdataFine;
@Temporal(TemporalType.DATE)
@Column(name = "DGVCDataInizio", nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
Calendar dgvcdataInizio;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name = "SoggettiCodice", referencedColumnName = "SoggettiCodice", nullable = false, insertable = false, updatable = false)})
@XmlTransient
Soggetti soggetti;
@Column(name = "SoggettiCodice", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@XmlElement
Integer soggettiCodice;
constructors, getters, setters, toString, other stuff
}
Anderen Klasse
Datigeneralipareretecnico:
@IdClass(delidete.domain.DatigeneralipareretecnicoPK.class)
@Entity
@Table(catalog = "delidete", name = "datigeneralipareretecnico")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(namespace = "DeliDete/delidete/domain", name = "Datigeneralipareretecnico")
public class Datigeneralipareretecnico implements Serializable
{
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns({@JoinColumn(name = "IDEnte", referencedColumnName = "DatiGeneraliId", nullable = false)})
@XmlTransient
Datigenerali datigenerali;
@Column(name = "DatiGeneraliId", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@XmlElement
Integer datiGeneraliId;
@PrimaryKeyJoinColumn
@OneToOne(fetch = FetchType.LAZY)
@XmlElement(name = "", namespace = "")
Datigeneralivistocontabile datigeneralivistocontabile;
@Temporal(TemporalType.DATE)
@Column(name = "DGTPDataFine")
@Basic(fetch = FetchType.EAGER)
@XmlElement
Calendar dgtpdataFine;
@Temporal(TemporalType.DATE)
@Column(name = "DGTPDataInizio", nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
Calendar dgtpdataInizio;
@Column(name = "DGTPDescrizione", nullable = false)
@Basic(fetch = FetchType.EAGER)
@XmlElement
String dgtpdescrizione;
@Column(name = "TecnicoParereCodice", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
@XmlElement
Integer tecnicoParereCodice;
constructors, getters, setters, toString, other stuff
}
Und die zwei PK-Klassen:
public class DatigeneralivistocontabilePK implements Serializable
{
@Column(name = "DatiGeneraliId", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
public Integer datiGeneraliId;
@Column(name = "SoggettiCodice", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
public Integer soggettiCodice;
}
public class DatigeneralipareretecnicoPK implements Serializable
{
@Column(name = "DatiGeneraliId", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
public Integer datiGeneraliId;
@Column(name = "TecnicoParereCodice", nullable = false)
@Basic(fetch = FetchType.EAGER)
@Id
public Integer tecnicoParereCodice;
}
Wenn ich jetzt versuche zu sparen Datigeneralivistocontabile entity-es geht alles ok, aber wenn ich versuche, öffnen Sie eine jsp, um zu zeigen, dass die Person, die ich bekomme:
GRAVE: Servlet.service() for servlet [DeliDete Servlet] in context with path [/DeliDete] threw exception [Request processing failed; nested exception is java.lang.IllegalArgumentException: org.hibernate.TypeMismatchException: Provided id of the wrong type for class delidete.domain.Datigeneralipareretecnico. Expected: class delidete.domain.DatigeneralipareretecnicoPK, got class delidete.domain.DatigeneralivistocontabilePK] with root cause
org.hibernate.TypeMismatchException: Provided id of the wrong type for class delidete.domain.Datigeneralipareretecnico. Expected: class delidete.domain.DatigeneralipareretecnicoPK, got class delidete.domain.DatigeneralivistocontabilePK
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:135)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1080)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:1028)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:623)
at org.hibernate.type.EntityType.resolve(EntityType.java:431)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:140)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:898)
at org.hibernate.loader.Loader.doQuery(Loader.java:773)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270)
at org.hibernate.loader.Loader.doList(Loader.java:2449)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2192)
at org.hibernate.loader.Loader.list(Loader.java:2187)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1258)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:241)
-----------------------------------------------------------------------
at delidete.dao.DatigeneralivistocontabileDAOImpl.findAllDatigeneralivistocontabiles(DatigeneralivistocontabileDAOImpl.java:109)
at delidete.dao.DatigeneralivistocontabileDAOImpl.findAllDatigeneralivistocontabiles(DatigeneralivistocontabileDAOImpl.java:93)
-----------------------------------------------------------------------
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy61.findAllDatigeneralivistocontabiles(Unknown Source)
-----------------------------------------------------------------------
at delidete.service.DatigeneralivistocontabileServiceImpl.loadDatigeneralivistocontabiles(DatigeneralivistocontabileServiceImpl.java:226)
-----------------------------------------------------------------------
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy88.loadDatigeneralivistocontabiles(Unknown Source)
-----------------------------------------------------------------------
at delidete.web.DatigeneralivistocontabileController.listDatigeneralivistocontabile(DatigeneralivistocontabileController.java:466)
-----------------------------------------------------------------------
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
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.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
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:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Meine Klassen befinden sich im Paket "delidete".
Die Methode wirft die Ausnahme ist:
@Transactional
public Set<Datigeneralivistocontabile> findAllDatigeneralivistocontabiles(
int startResult, int maxRows) throws DataAccessException
{
Query query = createNamedQuery("findAllDatigeneralivistocontabiles",
startResult, maxRows);
return new LinkedHashSet<Datigeneralivistocontabile>(
query.getResultList()); <---- this line throws the exception
}
und die namedquery es ruft:
@NamedQuery(name = "findAllDatigeneralivistocontabiles", query = "select myDatigeneralivistocontabile from Datigeneralivistocontabile myDatigeneralivistocontabile")
Die Abfrage "select * from datigeneralivistocontabile;" in der MySQL-Eingabeaufforderung ist in Ordnung:
mysql> select * from datigeneralivistocontabile;
+----------------+----------------+----------------+--------------+
| DatiGeneraliId | SoggettiCodice | DGVCDataInizio | DGVCDataFine |
+----------------+----------------+----------------+--------------+
| 1 | 1 | 2011-11-02 | 2011-11-03 |
+----------------+----------------+----------------+--------------+
1 row in set (0.00 sec)
mysql>
Ich weiß nicht, was zu tun ist, weil ich es geschafft, Dutzende von Einheiten, wie diese beiden ohne Probleme. Die Sache, die ich bin zu bemerken ist, dass dies das erste mal ich eine @OneToOne-annotation.
Vielleicht ist es das, was die Ausnahme...
Vielen Dank im Voraus an Euch alle
EDIT: versucht, die änderung der Spalte name TecnicoParereCodice zu SoggettiCodice zu entsprechen, auch im Namen der Spalte in der ersten Tabelle, aber hat sich nichts geändert: ich wieder eingerüstet alles, führen Sie den gleichen test und habe den gleichen Fehler
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da der primäre Schlüssel war das gleiche, aber mit verschiedenen Namen der Eigenschaft, modifizierte ich die db so:
neu eingerüstet, die beiden Entitäten und verändert die Klasse Datigeneralipareretecnico wie folgt:
Wie Sie sehen können, die in der Klasse Datigeneralipareretecnico ich verwendet die PK Klasse für die Klasse Datigeneralivistocontabile und alles ging ok.
Ich weiß, es ist nicht der richtige Weg, es zu lösen, aber hey, es funktioniert!
Hoffe, jemandem zu helfen..