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

使用spring data jpa联合表

家志学
2023-03-14

我有两个表,一个是users,另一个是usergroupmanytomany关系,我如何用spring-data-JPA将它们合并到一个列表中。

**不想使用本机查询

更新:

我想要的确切查询:

从组中选择标题

共有1个答案

龚宏壮
2023-03-14

如果你想要联合,我猜这两个实体的结构是相似的。

您可以创建一个超级实体,并使User和UserGroup扩展这个新实体。如果要保留两个单独的表,则在新实体上添加@inheritation(strategy=inheritancetype.table_per_class)

然后,为父实体创建Spring Data JPA存储库。

/**
 * new abstract Superclass
 */
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class User {

    @Id
    private String id;

    //...
}

/**
 * Existing User entity
 */
@Entity
@Table(name="my_users")
public class LoginUser extends User {

    private String password;

    @ManyToOne
    private Group group;

    //...
}

/**
 * Existing Group entity
 */
@Entity
@Table(name="my_groups")
public class Group extends User {

    private String name;

    @OneToMany(mappedBy="group")
    private Set<LoginUser> users;

    //...
}

/**
 * Super repository, providing UNION
 */
public interface UserRepository extends JpaRepository<User, String> {}
// UNION query returning both LoginUser and Group instances
List<User> myUnion = userRepository.findAll();

您无法使用JPA生成所需的查询。不可能将不同的字段联合起来。但是如果您将email和title映射到同一个字段(这是一个无稽之谈)并编写以下JPQL,JPA将生成您的查询。

 SELECT u.yourField FROM User u;
 类似资料:
  • SpringDataJpa中 Specification怎样使用in查询 实体类Menu.java如下 想通过roles属性做in查询,代码如下 错误如下: Parameter value [com.appmtce.pojo.entity.role.Role@20f81e2a] did not match expected type [java.util.Collection (n/a)] 我的S

  • 代码复现地址 上面的代码和我的另一个项目都可以正常运行; 但我现在的这个项目中这样使用就不行, console.log(value); 只会触发一次; 需要修改为这样才行: 这是为什么?是什么影响的? 版本都是 vue:3.3.4

  • 问题内容: 问题 表格1: 表2: 表3: 给定键(A1或A2),我需要使用表2中的相应值更新表1中的DataColumn1和DataColumn2列。 因此,table1可以更新x个行,如上面的数据所示。如果我要更新A1,则01和02行都应更新 (因此,表01中的值对于键01和键02的datacolumn1分别为0.15和1.2(对于datacolumn2)) 到目前为止我尝试过的是: 问题:

  • 假设我有这些类,请注意实体无论如何都不相关。 假定我有一个类,它的属性为,我可以在其中存储一个笔记本ID列表或任何字符串ID。假设有idsPointingToanEntity=[1,2,3],那么这个[1,2,3]在数据库中有一个等效的膝上型计算机条目。 注意:也可以是另一个实体,使不是一个选项

  • 我只想不使用xml,所以我需要非xml替代这些设置。这是我的POM。

  • 我已经建立了一个rabbit集群,每当数据库中发生变化时,我都会将消息发布到fanout交换中。 我为使用这些更新的一些微服务绑定了专用队列,我最初还为外部客户端设置了专用队列,以便他们可以将其与自己的rabbit基础架构联合起来,并使用每条消息的副本。 现在,我想知道,允许exchange联合而不是为每个新的外部消费者创建新的专用队列是否是更好的方法,因为将有越来越多的用户加入。 有哪些利弊?