Java Spring数据。存储库返回错误的Id(实体数据正确)

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

你好,这里有个问题: CRUDEPository为实体返回错误的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);
}
@存储库
公共接口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映射的信息。