当前位置: 首页 > 知识库问答 >
问题:

由:org.hibernate.MappingException引起:未知实体:新对象。JTA

高溪叠
2023-03-14
@Entity
public class Unidade implements Serializable{

    private static final long serialVersionUID = 1L;


    private Long numeroUnidade;
    private String nomeUnidade;
    private Integer numeroCep;
    private Integer numeroCepComplemento;
    private String tipoServico;
    private Integer status;
    private String logradouro;
    private String bairro;
    private String cidade;
    private String uf;
    private Integer statusVinculo; 

   //getter and setters
@PersistenceContext(unitName="projetoAtividade")
private EntityManager em;

public void selectTeste(){
        int quantidade = (Integer) em.createNativeQuery("select count(*) from abc.nattbu29_escritorio;").getSingleResult();
        System.out.println("========== QUANTIDADE DE REGISTRO NA TABELA ===========");
        System.out.println(quantidade);
    }

查询:

@SuppressWarnings("unchecked")
        public List<UnidadeTeste> buscarUnidadeGenerica(int numeroCeps, int numeroComplementoCeps){
            List<UnidadeTeste> lsita = new ArrayList<UnidadeTeste>();
            String query = "SELECT "
                    +"TBZ21.NATURAL as numeroPv, "
                    +"TBZ21.UNIDADE as nomePv, "
                    +"TBZ21.SITUACAO as statusVinculacao, "
                    +"TBJ55.TPO_ATUACAO_U44 as tipoServAZW, "
                    +"TBJ55.SITUACAO_ATUAL as status, "
                    +"TBH18.LOCALIDADE as cidade, "
                    +"'' as bairro, "
                    +"'' as logradouro, "
                    +"TBH18.CEP as numeroCep, "
                    +"TBH18.CEP_COMPLEMENTO as numeroCepComplemento, "
                    +"TBH18.FK_AZWVWL22_UNISG as uf "
                    +"FROM AZW.AZWTBJ55_RGATUACAO TBJ55 "
                    +"LEFT JOIN AZW.AZWTBH18_LOCALIDADE TBH18 ON "
                    +"TBH18.LOCALIDADEE = TBJ55.LOCALIDADEE "
                    +"LEFT JOIN AZW.AZWTBZ21_UNIDADE TBZ21 ON "
                    +"TBJ55.NATURAL = TBZ21.NATURAL "
                    +"WHERE TBH18.CEP = ?1 "
                        +"AND TBH18.CEP_COMPLEMENTO = ?2; "

            lsita = em.createNativeQuery(query, Unidade.class)
                    .setParameter(1, numeroCeps)
                    .setParameter(2, numeroComplementoCeps)
                    .getResultList();
            System.out.println(lsita.size()+"<<<<=====================");
            return lsita;
        }

错误:

Caused by: org.hibernate.MappingException: Unknown entity: br.com.project.modelo.UnidadeTeste
    at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:1031) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.getSQLLoadable(SQLQueryReturnProcessor.java:336) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processRootReturn(SQLQueryReturnProcessor.java:377) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.processReturn(SQLQueryReturnProcessor.java:356) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.custom.sql.SQLQueryReturnProcessor.process(SQLQueryReturnProcessor.java:172) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.loader.custom.sql.SQLCustomQuery.<init>(SQLCustomQuery.java:87) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.query.spi.NativeSQLQueryPlan.<init>(NativeSQLQueryPlan.java:67) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.engine.query.spi.QueryPlanCache.getNativeSQLQueryPlan(QueryPlanCache.java:155) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.AbstractSessionImpl.getNativeSQLQueryPlan(AbstractSessionImpl.java:218) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:224) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
    at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:252) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
    ... 84 more

在我的网上搜索中,几乎所有论坛主题的答案都是一致的:“把@实体放在类声明之前”,但是,这对我来说不起作用。

 ERROR [org.jboss.ejb3.invocation] (http--127.0.0.1-8888-2) JBAS014134: EJB Invocation failed on component AtividadeEJB for method public void br.com.project.jboss.modelo.AtividadeEJB.testeChamada(): javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.MappingException: Unknown SqlResultSetMapping [UnidadeResult]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190) [jboss-as-ejb3-7.1.1.Final.jar:7.1.1.Final]
    at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288) [jboss-invocation-1.1.1.Final.jar:1.1.1.Final]
@Entity
@SqlResultSetMapping(name="UnidadeResult", 
entities={ 
    @EntityResult(entityClass=UnidadeTeste.class, fields={
        @FieldResult(name="tx_descricao", column="nomePv"),
        @FieldResult(name="nu_idntr_pessoa", column="id")})},
columns={
    @ColumnResult(name="nomePv")}
)


public class UnidadeTeste implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    private Long id;

    private String nomePv;

    public String getNomePv() {
        return nomePv;
    }

    public void setNomePv(String nomePv) {
        this.nomePv = nomePv;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }
@SuppressWarnings("unchecked")
    public void testeChamada(){
        List<Object> lista = em.createNativeQuery("SELECT nu_idntr_pessoa as id, email as nomePv FROM pessoa;", "UnidadeResult").getResultList();
        System.out.println("===============>>"+lista.size());
    }

共有1个答案

马渊
2023-03-14

如果要将本机查询的结果返回给对象,我建议使用SQLResultSetMapping。

否则,将返回类型设置为:

List<Object[]> results = em.createNativeQuery(query)
                .setParameter(1, numeroCeps)
                .setParameter(2, numeroComplementoCeps)
                .getResultList();

然后循环遍历结果列表,并将对象数组的每个成员强制转换为其数据类型。

 类似资料:
  • 问题内容: 我正在尝试入门Hibernate 2nd Edition,而我一直试图将简单的工作示例与HSQLDB结合在一起。 当我跑步时,我得到 这是我得到的: Message.java PopulateMessages.java build.properties hibernate.cfg.xml build.xml 问题答案: 您的实体注释不正确, 必须 使用注释。您可以使用Hibernate

  • 问题内容: 我真的很想了解我的代码发生了什么。 我有一个独立的应用程序,它使用spring和Hibernate作为JPA,我正在尝试使用单个主类运行测试 我的主班 我的应用程序上下文是: 我的用户模型是: 我的DAO是: 这是我运行程序时出现的我的stacktrace错误: 问题答案: 您必须在会话工厂配置中列出您的类。如果使用,则可以自动发现实体。 为了在hibernate和spring中使用注

  • 此实体由Spring控制器管理,方法如下: 服务类别为: 而DAO是这样的:

  • 我在应用程序中使用了Spring3和Hibernate4。在运行时,我得到的异常值低于异常值。

  • 问题内容: 我写了一些代码将数据插入SQL数据库。实际上,我正在尝试使用Hibernate学习Struts2。但是,不幸的是,我在提交表格后遇到了问题。 我找不到此错误消息的原因。我的try&catch块引发如下错误: Pojo(): 还具有: 问题答案: 如果未映射实体,则应检查hibernate配置。Hibernate是ORM框架,用于将pojo(实体)映射到数据库架构对象。您没有配置或hib

  • 问题内容: 我收到以下hibernate异常: 简化的Matchup类如下所示: 简化的Team类如下所示: 笔记: 比赛和团队都有子类。我不确定这是否会影响局势。 我的persistence.xml中列出了Matchup和Team都包括在内。 如果我在两个getter方法上都使用@Transient批注,该错误将消失。 谁能阐明为什么会发生这种异常? 问题答案: 我发现了问题:我没有将Team类