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

如何使用JParePository创建左联接?

杭镜
2023-03-14
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "name")
private String name;

@Column(name = "age")
private int age;


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getAge() {
    return age;
}

public void setAge(int age) {
    this.age = age;
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "name")
private String name;

@Column(name = "user_id")
private  int userId;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public int getUserId() {
    return userId;
}

public void setUserId(int userId) {
    this.userId = userId;
}

我用@query创建了UsersRepository

public interface UsersRepository extends JpaRepository<User, Long> {
            @Query("SELECT u.id, u.name, u.age FROM users AS u LEFT JOIN post AS p ON u.id=p.user_id WHERE p.user_id IS NULL")
            List<User> findByStatus();
        }

我得到错误QuerySyntaxException:users没有映射,我可以在没有@query的情况下这样做吗?我可以用@onetomany做这个吗?如何在Jpa OneTomany上实现select?我想得到没有帖子的所有用户。

共有1个答案

皇甫俊雅
2023-03-14

您没有映射关联,而是使用本机SQL查询,而不是HQL查询。

在不更改用户实体的情况下,必须使用右联接,并且应该将关联映射为单向多对一:

@Entity
class User {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column(name = "name")
  private String name;

  @Column(name = "age")
  private int age;

  ... 
}

@Entity
class Post {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;

  @Column(name = "name")
  private String name;  

  @ManyToOne
  @JoinColumn(name = "user_id")
  private User user;
  ... 
}

现在可以运行以下HQL查询:

@Query(value = "SELECT u FROM Post p RIGHT JOIN p.user u WHERE p IS NULL");
 类似资料:
  • 汽车实体 保留实体 非常感谢你的帮助。

  • 那么如何将此更改为jpql查询代码呢?谢谢

  • 问题内容: 让我们假设以下内容: 表A 我有一个ID列表(10、11、12、13、14),可用于在此表中查找ID。这个ID清单是在我的前端生成的。 使用纯SQL,我需要从此列表(10、11、12、13、14)中选择ID,这些ID在表A中没有条目(在“ id”列中联接)。结果应该是id的13和14的结果集。 如何仅使用SQL完成此操作?(此外,如果可能,我想避免使用存储过程) 我能想到的唯一方法是,

  • 问题内容: 我不了解左外部联接,右外部联接的概念,或者根本不理解为什么我们需要使用联接!我正在努力解决的问题以及正在处理的表格在这里:链接 问题3(b) 在SQL中构造命令以解决以下查询,解释了为什么必须使用(外部)联接方法。[5分]“找到每名工作人员及其his属(如果有)的姓名” 问题3(c)- 使用(i)join方法和(ii)子查询方法在SQL中构造命令以解决以下查询。[10分]“查找在计算机

  • 我有一个服务层,可以像这样自动连接存储库 我有了新的要求,根据商店的数量,存储库查询逻辑应该改变。我正在考虑抽象我的存储库并使用工厂模式。当前存储库是一个接口,并扩展了JpaRepository此外,它的所有函数都使用@Query注释来定义JPQL。这是一个只有一个函数的例子,但是在我的实际存储库中有几个函数 新要求指出,对于特定的 storeId,SQL 需要更改为如下所示的内容: 但是,所有剩

  • 即使我的接口MonRepo(扩展JpaRepository)没有注释任何注释,告诉spring为这个类创建一个bean(例如。服务、控制器、组件等)。如何创建此类的 Bean。我确信创建了一个 bean,因为我在另一个类中自动连接了 monRepo,并且它工作得很好。 MonRepo公司 其中 monRepo 自动连线的类 除了我的类,我没有在任何地方使用过enableJpaRepository注