复合键和 spring-data-jdbc

Ale*_*rov 8 java spring jdbc spring-data spring-data-jdbc

我有一个使用复合键的数据库。是否可以使用 spring-data-jdbc?我尝试了里程碑版本 1.1M2,其中我以以下方式映射了我的实体:

class History {

   @ID
   @Embedded
   private CompositeHistoryID  id;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的存储库类中,我添加了

HistoryRepository extends Repository<History,CompositeHistoryID  >{
   History  findByhId(CompositeHistoryID  id)
}
Run Code Online (Sandbox Code Playgroud)

我跟踪了SQL,它没有用。嵌入部分有效,但 where 子句不正确。它使用单个参数持有者而不是具有常规复合键结构,其中 element1=subkey1 和 element2=subkey2 等等......

我有两个问题。有什么方法可以使复合 ID 工作吗?

第二个问题是,让我们假设我使用自定义@Query的顶部findByID将保存方法下班后,如果?什么是完全没有ID,如果我只是随机选择一个列并说你将成为我的ID怎么办?

Jen*_*der 7

No@Embedded不适用于 Id,。现在所有的 SQL 语句都为 id 列假定一个简单的值。我认为没有解决方法。

一种可行的解决方法是创建一个视图,该视图将复合键显示为单个字段,并具有将正确数据写入基础表的触发器。

  • 这真的很糟糕,使得 Spring Data JDBC 对于大多数数据库模式毫无用处:( (4认同)
  • @PowerStar我认为你有点夸张了:)但如果你有遗留数据库或自然密钥,这确实是不利的。 (4认同)
  • 那么将 spring-jdbc 与此类表一起使用的唯一方法是向所使用的表添加一个合成的简单类型 ID 列? (2认同)