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

是否可以使用一个存储库来选择不同表中的子类?

东方嘉木
2023-03-14

我想使用一个存储库从不同的表中选择实体。我使用Spring Data JPA,并有自己的查询方法:

@Query(value = "SELECT * FROM ?=1 WHERE ref_id=?2", nativeQuery = true)
BaseEntity findByRefId(String tableName, Long refId);

第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码。

接下来我有两个子类EntityOne和EntityTwo。它们的字段(列)与BaseEntity相同,但它们必须在不同的表中。

@MappedSuperclass // or @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) and @Entity    
BaseEntity
        |
        @Entity
        EntityOne
        |
        @Entity
        EntityTwo

我尝试过为BaseEntity使用@Mep dSuperclass注释。但它不起作用,我有一个例外,即BaseEntity必须注释为@Entity。我也尝试过将BaseEntity注释为@Entity和@继承(策略=继承类型。TABLE_PER_CLASS),但我找到了SQLException:列“clazz_”。我甚至没有那个列。

共有1个答案

虞俊美
2023-03-14

来自spring docshttps://docs.spring.io/spring-data/jpa/docs/1.5.0.RC1/reference/html/jpa.repositories.html

看看例子2.12

您可以使用SpEL来执行此操作:

  @Query("select t from #{#entityName} t where t.attribute = ?1")
  List<T> findAllByAttribute(String attribute);
 类似资料:
  • 我有一个注册程序,用户可以在餐厅预订餐桌。 因为我需要存储潜在的无限量的客户,所以我不能显式地创建Customer类的新实例,因为我需要能够在运行时添加它们。 我想过使用HashMap通过他们填写的注册表插入每个用户,但是,它不是保留每个客户的唯一值,而是用哈希图中的最新条目覆盖它们。 明确地说,键正在改变,它成功地添加了一个新的键,但是前一个键中的值被覆盖了 例子 类客户有 3 个设置器:设置

  • 我使用redis在我的Spring Boot应用程序中存储会话。我也在使用Spring会话库来实现这一点。我有两个不同的redis实例,即和。一旦有人进入我的应用程序(当然是在登录之后),我希望将他们的会话存储在和服务器中。请注意,这两个redis实例都是主实例,不在任何主从设置中。这是我到目前为止在我的Spring设置。 所以现在,一旦用户登录,他们的会话就存储在中(我在中添加了与美国redis

  • 我有一个JSF表,它使用Hashmap存储选定的复选框。我的问题是:是否可以使用2D Java数组而不是Hashmap来存储密钥? 编辑我使用此代码来存储选定的键。如何为重写此代码? 我的想法是创建2D数组(它将用于映射),它将存储页面数和页面上的列表。例如,100页x 10键。 编辑2 我使用延迟加载创建了JSF表,该表从Oracle获取数据。JSF工作得既好又快。我面临的问题是,当我试图创建“

  • 问题内容: 我需要在Spring Data Repository中使用原始SQL,这可能吗?我看到的所有内容始终都是基于实体的。 问题答案: @Query批注允许通过将nativeQuery标志设置为true来执行本地查询。 引用Spring Data JPA 参考文档。

  • 我必须用一个特定的名称(我使用spring和Jpa)来命名扩展CrudRepository的接口,即。 所以在本例中,我有一个名为UserRepository的实体 我尝试了注释 但这行不通...

  • 问题内容: 有没有一种方法可以检查表是否存在 而无需 从表中选择和检查值? 也就是说,我知道我可以检查返回的字段数,但是似乎必须有一种更直接/更优雅的方法。 问题答案: 您无需计数。 如果没有错误,则表存在。 或者,如果您想正确,请使用INFORMATION_SCHEMA。 或者,您可以使用 如果结果集中有一行,则表存在。