带有复合主键的Spring Data JDBC
我在使用 Spring Boot / Spring Data JDBC 4.0.3 和 JMolecules 2025.0.2。
我有一个简单的类:
@Getter
@AggregateRoot
@AllArgsConstructor
public class Service {
@Id
private final ServiceId id;
private String name;
@Version
private Integer version;
}
record ServiceId(UUID tenantId, UUID id) implements Identifier {
}
以及一个简单的仓库:
public interface ServiceRepo extends ListCrudRepository<Service, ServiceId> {
}
但在尝试保存它时:
repo.save(new Service(new ServiceId(UUID.randomUUID(), UUID.randomUUID()), name, null))
在底层,它会尝试做
SQL [INSERT INTO \"service\" (\"id\", \"name\", \"version\")
复合主键被忽略了。这里到底出了什么问题?
我本来预计应该是:
SQL [INSERT INTO \"service\" (\"tenant_id\", \"id\", \"name\", \"version\")
解决方案
问题在于,当在类路径上有jMolecules时,Spring Data注册了一个 IdentifierToPrimitivesConverter,这使得任何继承自 org.jmolecules.ddd.typesIdentifier 的类型成为简单类型,从而阻止将其展平成嵌入式实体。
目前唯一的解决方法是让你的复合主键不要继承自 Identifier。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。