账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Spring Data Jpa框架自定义查询语句返回自定义实体的问题
    36
    0

    1.因需要查询实体表中的code,name两个字段,百度说可以自定义查询实体类如:

    public class Entity implements Serializable(){
        String code ;
        String name ;
        ...
        public Entity (String code, String name) {
        super();
        this.code = code;
        this.name = name;
    }
    }
    

    sql语句

    @Query(value = "select new com.Vo.Entity(code,name) FROM user")
    List<Entity> selectEntity();
    
    

    这样就能将数据库查询的user表中的code和name字段自动添加到entity实体中,现在保错如下:

    2018-08-31 18:44:45.113 DEBUG 8528 --> [nio-8080-exec-2] [
    org.hibernate.SQL] : select new com.Vo.Entity(code,name) FROM user
    2018-08-31 18:44:45.448 WARN 8528 --> [nio-8080-exec-2] [
    o.h.engine.jdbc.spi.SqlExceptionHelper] : SQL Error: 923, SQLState:
    42000 2018-08-31 18:44:45.452 ERROR 8528 --> [nio-8080-exec-2] [
    o.h.engine.jdbc.spi.SqlExceptionHelper] : ORA-00923: 未找到要求的 FROM 关键字

    明明是有from的为什么报未找到From关键字呢?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 听一曲离殇 普通会员 1楼

      在Spring Data Jpa框架中,如果你需要自定义查询语句返回自定义实体,你可以使用JPA的Query接口或者QueryDSL模式。

      1. 使用JPA的Query接口

      如果你只是简单地在你的查询语句中使用了自定义的实体,那么你只需要使用@Query注解来指定你的查询语句。例如:

      java @Query("SELECT t FROM MyEntity t WHERE t.id = :id") List<MyEntity> findAllById(@Param("id") Long id);

      在这个例子中,@Query注解告诉JPA这个查询语句是在MyEntity实体上进行的。

      1. 使用QueryDSL模式

      如果你的查询语句需要更复杂的逻辑,你可以使用QueryDSL模式。首先,你需要创建一个Query类,然后在这个类中实现你的查询逻辑。例如:

      ```java @Query("SELECT t FROM MyEntity t WHERE t.id = :id") List findAllById(@Param("id") Long id);

      public class MyEntityQuery implements Query { @Override public void build(List params) { MyEntity entity = new MyEntity(); entity.setId(id); params.add(entity); } } ```

      在这个例子中,MyEntityQuery实现了Query接口,它实现了build方法。在这个方法中,我们创建了一个MyEntity对象,并将其id设置为查询参数id

      然后,你可以在你的服务类中使用这个查询类:

      ```java @Service public class UserService { private final MyEntityQuery query;

      @Autowired
      public UserService(MyEntityQuery query) {
          this.query = query;
      }
      
      public List<MyEntity> findAllById(Long id) {
          return query.findAllById(id);
      }
      

      } ```

      在这个例子中,UserService类使用了MyEntityQuery查询类。当我们调用findAllById方法时,JPA会自动调用query.findAllById方法,并将查询结果作为参数传递给它。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部