Java Spring数据。存储库返回错误的Id(实体数据正确)
你好,这里有个问题: CRUDEPository为实体返回错误的Id 以下是基本JPA用户实体:Java Spring数据。存储库返回错误的Id(实体数据正确),java,spring,jpa,spring-data-jpa,spring-data,Java,Spring,Jpa,Spring Data Jpa,Spring Data,你好,这里有个问题: CRUDEPository为实体返回错误的Id 以下是基本JPA用户实体: @Data @Entity(name = "user") @EqualsAndHashCode(exclude = {"roles", "password", "data"}) @ToString(exclude = {"roles", "password", "data"}) public class User { @Id @GeneratedValue(strategy = G
@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);
}
@存储库
公共接口SomeDataRepository扩展了Crudepository{
可选的findByUserId(长用户标识);
}
方法findUserById从DB返回正确的SomeData实体,但此实体的ID与userId相同。。。
正因为如此,我无法执行其他活动(插入或更新表“public\u view”违反了外键约束“fk\u view\u to\u some\u data”)
这很奇怪。问题可能是因为您使用了
@MapsId
注释。以下是注释值的作用,如下所示:
关系属性所对应的组合键中的属性的名称。如果未提供,则关系映射实体的主键
您可以尝试为注释设置特定值,或者以不同方式映射一对一关系。例如,在SomeData
类中使用@JoinColumn
注释:
// ... your annotations ...
public class SomeData {
// ... your other fields ...
@OneToOne
@JoinColumn(name = "some_data_id", referencedColumnName = "id")
private User user;
}
这里有一些您可以使用的替代方法:问题可能是因为您使用了
@MapsId
注释。以下是注释值的作用,如下所示:
关系属性所对应的组合键中的属性的名称。如果未提供,则关系映射实体的主键
您可以尝试为注释设置特定值,或者以不同方式映射一对一关系。例如,在SomeData
类中使用@JoinColumn
注释:
// ... your annotations ...
public class SomeData {
// ... your other fields ...
@OneToOne
@JoinColumn(name = "some_data_id", referencedColumnName = "id")
private User user;
}
以下是一些您可以使用的替代方法:您会遇到什么错误?当id是一个生成的值时,您是否也在尝试更新它?您会得到什么错误?您是否也在尝试更新id,而它可能是生成的值?谢谢,这是正确的原因!我将阅读更多关于JPA映射的信息。谢谢,这是正确的理由!我将阅读更多关于JPA映射的信息。