我正面临这样的问题。我有这个代码库。这是我的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行之后只有两个选择,但是没有插入。有什么想法可以是这种奇怪行为的原因吗?
1条答案
按热度按时间xlpyo6sf1#
刚刚创建了我的小测试,当使用复合键时,如果实体上没有任何变化,那么实体就没有理由被插入或更新,因此没有更新或插入日志。
尝试更改实体上的任何内容,例如。other_data,你会看到一个更新被触发。如果你改变了任何一个组合键,一个insert语句将被执行。