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

InformationsquelleAutor Andrea | 2011-11-03
Schreibe einen Kommentar