首页 > 解决方案 > Spring Boot:使用外键执行@query

问题描述

我正在尝试使用如下的外键获取 bean:

-- 第一个包含外键的 bean (user_id : id):

   @Entity
   @Table
   public class Class_1{
    @Id
    @SequenceGenerator(
       //code
            )
    @GeneratedValue(    
       //code
            )
    private Long id;
    
    @OneToOne
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;

   /**
   * constructors , getters and setters, ... */
  }

- 我想使用外键填充的第二个 bean:

@Entity
@Table
public class User{
    
    @Id
    @SequenceGenerator(
            // code
            )
    @GeneratedValue(    
            //code
            )
    private Long id;

   /**
   * attributes, constructors , getters and setters, ... */
}

这是我的表格:

Table Class_1
+ ID + USER_ID +
+----+---------+
+ 1  +   1     +

Table User
+ ID + PARAM_1 + PARAM_2 + ... + PARAM_N +
+----+---------+---------+-----+---------+
+ 1  +  value_1+ value_2 + ... + value_n +

现在这是我尝试执行的查询:

    @Query("SELECT * FROM CLass_1 c WHERE c.user_id.id=?1")
    public List<Class_1> findClass_1ByUser(Long userId);

或(但仍然不起作用:

@Query("SELECT * FROM CLass_1 c WHERE c.user_id=?1")
    public List<Class_1> findClass_1ByUser(Long userId);
  
  @Query("SELECT * FROM CLass_1 c WHERE c.user=?1")
    public List<Class_1> findClass_1ByUser(User user);

异常:查询方法 public abstract java.util.List package.class_1.Class_1Repository.findClass_1ByUSer(java.lang.Long) 的验证失败!

有什么帮助吗?

提前谢谢你:)

标签: javaspring-bootspring-data-jpa

解决方案


由于您声明了HQL查询,您可以将 替换*为对象别名SELECT c FROM CLass_1 c WHERE c.user_id=?1或删除SELECT例如FROM CLass_1 c WHERE c.user_id=?1


推荐阅读