spring JPA实体复合主键未保存到数据库

nmpmafwu  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(123)

我正面临这样的问题。我有这个代码库。这是我的Entity类:

@Entity
@Table(name = "your_entity")
public class MyEntity implements Serializable {

    @EmbeddedId
    private MyEntityId id;

    @Column(name = "other_data")
    private String otherData;

    // Getters and setters
}

这是java代码中的复合主键部分

@Embeddable
public class MyEntityId implements Serializable {

    @Column(name = "id1")
    private Long id1;

    @Column(name = "id2")
    private Long id2;

    // Getters and setters
}

下面是用于保存该实体的存储库部分

public interface MyEntityRepository extends JpaRepository<MyEntity, MyEntityId> {}

这个是服务层:

@Service
public class MyEntityService {

    @Autowired
    private MyEntityRepository repository;

    public void saveEntity(MyEntity entity) {
        repository.save(entity);
    }
}

这是将记录保存到数据库的代码:

1. final MyEntity entity = new MyEntity();
   2. entity.setId(new MyEntityId("id_1", "e56962a6-4747-49cd-b67b-bf8b01975c4c"));
   3. final List<MyEntity> got = repository.findAll();
   4. final MyEntity saved = repository.save(entity);

这里有趣的部分是,当执行第3行时,它会得到以前保存的列表,当执行第4行时,它通常会传递该行,没有任何错误,但没有新记录保存在数据库中。同样在日志部分,我看到在第4行之后只有两个选择,但是没有插入。有什么想法可以是这种奇怪行为的原因吗?

xlpyo6sf

xlpyo6sf1#

刚刚创建了我的小测试,当使用复合键时,如果实体上没有任何变化,那么实体就没有理由被插入或更新,因此没有更新或插入日志。
尝试更改实体上的任何内容,例如。other_data,你会看到一个更新被触发。如果你改变了任何一个组合键,一个insert语句将被执行。

相关问题