搜尋

首頁  >  問答  >  主體

java - JPA 中自訂物件和原生物件屬性名不一致怎麼解決?

有如下段代碼 其中person是jpa的entity對象,personResult是自定義對象

@Query(select new com.xx.yy.PersonResult(p.id,p.name,p.age) from Person p)
 List<PersonResult> findPersonResult();

這樣執行是可以的,但是如果我其中的personResult對象中的id是叫personId,上麵的代碼該如何改?

我用過

@Query(select new com.xx.yy.PersonResult(p.id as personId,p.name,p.age) from Person p)
 List<PersonResult> findPersonResult();

會報錯,是不是jpql new對象的時候不支持別名嗎?

PHPzPHPz2804 天前586

全部回覆(1)我來回復

  • 阿神

    阿神2017-04-18 10:58:49

    你的程式碼

    @Query(select new com.xx.yy.PersonResult(p.id as personId,p.name,p.age) from Person p)
     List<PersonResult> findPersonResult();

    你把as去掉就可以了,jpa是不支持這種語法的。



    關於你的問題:Entity 和你自訂的類別屬性名稱不一樣的問題,你大可不必擔心,使用select new xx.xx.PersonResult(p.id,p.name.p.age) 语法时,jpa不会关心真实的字段叫什么名字,只要字段类型一致就可以了,因为这里采用是Java的构造函数。调用构造函数时只需要关心需要传入几个参数以及参数的类型

    看下我程式碼,這樣會直覺一點

    @Query("select new com.zfxiao.pojo.AnnotherPerson(p.id,p.name,p.age) from Person p ")
    List<AnnotherPerson> findAnnotherPerson()

    AnnotherPerson的建構子

    public AnnotherPerson(Long personId, String name, Integer age) {
        this.personId = personId;
        this.name = name;
        this.age = age;
    }

    回覆
    0
  • 取消回覆