
[英]Spring Data / Neo4J Repository : findByXXX returns Map, not Entity
[英]Spring Data. Repository returns wrong Id (entity data is correct)
美好的一天,这里有问题:CrudRepository 为实体返回错误的 Id。
这是基本的 JPA 用户实体:
@Data
@Entity(name = "user")
@EqualsAndHashCode(exclude = {"roles", "password", "data"})
@ToString(exclude = {"roles", "password", "data"})
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(mappedBy = "user", fetch = FetchType.LAZY)
private SomeData data;
...
与某些数据实体存在一对一的关系。
@Data
@Entity(name = "some_data")
@TypeDefs({
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
})
@ToString(exclude = {"user", "views", "biData"})
@EqualsAndHashCode(exclude = {"user", "views", "biData"})
public class SomeData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@MapsId
private User user;
...
并且有 crud 存储库:
@Repository
public interface SomeDataRepository extends CrudRepository<SomeData, Long> {
Optional<SomeData> findByUserId(Long userId);
}
方法 findUserById 从 DB 返回正确的 SomeData 实体,但该实体与 userId 具有相同的 ID...因此我无法进行其他活动(插入或更新表“public_view”违反外键约束“fk_view_to_some_data”)
这很奇怪。
问题可能是因为您使用了@MapsId
注释。 根据Javadoc ,这是注释的值的作用:
关系属性对应的复合键中的属性名称。 如果未提供,则关系映射实体的主键。
您可以尝试为注释设置特定值,或以不同方式映射您的一对一关系。 例如,在SomeData
类中使用@JoinColumn
注释:
// ... your annotations ...
public class SomeData {
// ... your other fields ...
@OneToOne
@JoinColumn(name = "some_data_id", referencedColumnName = "id")
private User user;
}
以下是您可以使用的一些替代方案: https : //www.baeldung.com/jpa-one-to-one
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.