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

Spring Boot数据jpa中的内部连接

皇甫繁
2023-03-14

组:

@Entity
@Table(schema = "HR",  name = "GROUPS")
public class Group {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "GROUP_ID")
    private Long id;

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

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

用户:

@Entity
@Table(schema = "HR", name = "USERS")
public class User {

    @Id
    @GeneratedValue(strategy = IDENTITY)
    @Column(name = "USER_ID")
    private Long id;

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

    @Column(name = "GROUP_ID")
    private Long groupId;

    @ManyToMany
    @JoinTable(
        schema = "HR",
        name = "GROUPS",
        joinColumns = {@JoinColumn(table = "GROUPS", name = "GROUP_ID", insertable = false, updatable = false)},
        inverseJoinColumns = {@JoinColumn(table = "USERS", name = "GROUP_ID", insertable = false, updatable = false)}
    )
    @WhereJoinTable(clause = "GROUP_ACTIVE='Y'")
    private List<Group> group;

存储库类:

public interface UserRepository extends CrudRepository<User, Long>{        
    List<User> findByName (String name);
}
  SELECT U.*
  FROM HR.USER U, HR.GROUP G
  WHERE U.GROUP_ID=G.GROUP_ID
      AND G.GROUP_ACTIVE='Y'
      AND U.USER_NAME=?

共有1个答案

商飞翮
2023-03-14

我根据您的设置做了一些测试,解决方案需要使用过滤器(假设只有一个组具有Group_Activity='y'):

集团实体

@Entity
@Table(schema = "HR",  name = "GROUPS")
public class Group {

     @OneToMany(mappedBy = "group")
     @Filter(name = "activityFilter")
     private Set<User> users;

用户实体

@Entity
@Table(schema = "HR", name = "USERS")
@FilterDef(name="activityFilter"
       , defaultCondition="group_id = 
              (select g.id from groups g where g.GROUP_ACTIVE='Y')")
public class User {

@ManyToOne
@JoinColumn(name = "group_id")
private Group group;
session.enableFilter("activityFilter");
session.createQuery("select u from Group g inner join g.users u where u.user_name = :userName");
@FilterDef(name="activityFilter"
       , defaultCondition="group_id in
              (select g.id from group g where g.GROUP_ACTIVE='Y')")
 类似资料:
  • 我正在尝试从mysql数据库中检索今天的记录。 和控制器代码: 我希望通过使用findByDate(...)获得今天的记录方法,但似乎不起作用。在查看MysqlWorkbench的数据时,我还注意到一个小问题:日期似乎提前了2小时(例如:现在是11:57,但在mysql workbench软件中显示的是9:57,当我查询服务器时间时,显示的是不正确的tme……)我其实不关心小时/分钟/秒,我只想检

  • 我有两个数据帧df1和df2。 i、 e.df1的索引为天,df2的索引为日期时间。我想在索引上执行DF1和DF2的内部连接,这样如果DF2中对应于DF2的时间在DF1中可用,则我们认为内部连接为真,否则为假。 我想获得两个df11和df22作为输出. df11将有共同的日期和相应的列从df1. df22将有共同的日期小时和相应的列从df2. "例如df1中的"2002-08-04"和df2中的"

  • 我有一个pyspark数据帧(df1 ),它由10K行组成,数据帧看起来像- 另一个pyspark数据帧(df2)由100k记录组成,看起来像- 我想使用pyspark内连接,最终的数据帧看起来像- df2中mobile_no的长度是12,但df1中是10。我可以加入它,但这是昂贵的操作。使用pyspark有帮助吗?

  • 作为一个爱好项目,我目前正在开发一个全堆栈的web应用程序。 我的技术堆栈是: MySql数据库 我已经对数据库进行了建模,并为数据库中的所有表创建了jpa实体。数据模型包括一些双向关系(多对多关系)。然后,我开始为前端创建一些APIendpoint进行交互,但我在决定如何序列化数据并将其发送到前端时遇到了一些问题。 在大多数教程和示例中,与数据库对象直接相似的对象被序列化,然后发送到前端。但我不

  • 我有一个用spring boot Version1.5.x编写的项目,它连接到一个MariaDB数据库和几个表,它们之间有大量的关系。为了查询数据库,我使用org.springframework.data.jpa.repository中提供的JpaSpecificationExecutor接口。我们使用规范的原因是为了构建动态查询,而不必为存储库本身中的每个筛选可能性编写新的查询。在实体本身中,每

  • 我试图在JPA2中进行一些查询,但它不断调用另一个查询来获取依赖项的信息 我的课程是: 我把这样的查询称为: 但我的结果是: