Java 使用eclipselink和@namedquery强制转换时出错

Java 使用eclipselink和@namedquery强制转换时出错,java,jakarta-ee,jpa,eclipselink,named-query,Java,Jakarta Ee,Jpa,Eclipselink,Named Query,一段时间以来,我在日食图绘制方面遇到了一个问题 我有两门课,Acordo和ValorAcordo 所以我有 @ Entity @ Table ( name = " TB_ACORDO " , schema = " JUR " ) @ NamedQueries ( { @ NamedQuery ( name = " sql1 " query = " SELECT a.NU_ACORDO , a.NU_MOVIMENTACAO , v.NU_CONTRATO "

一段时间以来,我在日食图绘制方面遇到了一个问题

我有两门课,Acordo和ValorAcordo

所以我有

@ Entity
    @ Table ( name = " TB_ACORDO " , schema = " JUR " )
    @ NamedQueries ( {
    @ NamedQuery ( name = " sql1 "
    query = " SELECT a.NU_ACORDO , a.NU_MOVIMENTACAO , v.NU_CONTRATO "
    + "FROM Acordo"
    + " INNER JOIN ValorAcordo v"
    + "ON a.NU_ACORDO = v.NU_ACORDO "
    + " WHERE = a.NU_MOVIMENTACAO : nu_movimentacao " )
    } )
    public class Acordo implements Serializable {

    private static final long serialVersionUID = - 6202293050832719017L ;

    @ Id
    @ GeneratedValue ( strategy = GenerationType.IDENTITY )
    private Long NU_ACORDO ;

    private Long NU_MOVIMENTACAO ;
    private Long VR_TOTAL ;

    @ OneToOne ( fetch = FetchType.LAZY )
    private ValorAcordo valorAcordo ;
    // ***

当我跑的时候

Query q = em.createNamedQuery ( " sql1 " Acordo.class )
. setParameter ( " nu_movimentacao " 3103461 );
List <Acordo> q.getResultList list = ( ) ;
有什么想法吗

我认为这是一个映射问题,但是发现了一个链接eclipsebug,其中一些开发人员报告了这个错误。但是他们在简单的查询中遇到了这个问题,我只有在使用JOIN时才遇到这个问题


谢谢

sql1的查询定义为“选择a.NU_ACORDO、a.NU_MOVIMENTACAO、v.NU_CONTRATO..”——它是从ACORDO中选择3个字段,而不是一个完整实例,因此JPA为您提供了包含每行3个值的对象数组列表。如果需要完整的实体,请将查询改为“从Acordo a…中选择a…”。

我改为“选择a,v…”,因为我需要两个表的值!但是eclipselink生成了一个奇怪的SQL。。。他们选择了所有列TB_Acordo和TB_ValorAcordo,但eclipselink创建了de列“Acordo_NU_Acordo”!哦,那是不存在的!看一看!“选择t0.*、t1.*、t1.ACORDO\u NU\u ACORDO FROM JUR.TB\u ACORDO t0、JUR.TB\u VALOR\u ACORDO t1,其中((t0.NU\u MOVIMENTACAO=?)和(t0.NU\u ACORDO=t1.NU\u ACORDO)),Oracle错误“'t1”“ACORDO\u NU\u ACORDO.”:无效标识符“您的问题有一个classCastException,它来自使用3个字段。如果您有其他需要解决的问题,或者有其他潜在问题导致您以这种方式设计系统,我们无法理解您的想法。用您的实际问题创建一个问题,可能有人能够提供帮助。在这种情况下,您的映射与数据库中的映射不匹配。例如,您的查询暗示ValorAcordo有一个指向Acordo的外键,但Acordo中的1:1映射默认为在Acordo中使用一个指向ValorAcordo的外键,我假设它不存在,ValorAcordo->Acordo创建了另一个错误状态不存在的外键,而不是使用NU_Acordo字段,我假设它是预期的外键。尝试从一个简单的JPA示例开始,然后扩展到您的模型
Query q = em.createNamedQuery ( " sql1 " Acordo.class )
. setParameter ( " nu_movimentacao " 3103461 );
List <Acordo> q.getResultList list = ( ) ;
Exception in thread " main" java.lang.ClassCastException : [ Ljava.lang.Object ; can not be cast to br.victor.des.bean.Acordo
at br.victor.des.main.MainAcordo.main ( MainAcordo.java : 46)