我有一个实体类,它具有以下字段。
@Entity(name = "my_table")
public class MyTable {
@Id
@Column(name = "request_id", nullable = false)
private String requestId;
@GeneratedValue(strategy = GenerationType.IDENTITY) // Auto-increment field
@Column(name = "seq_id")
private Long seqId;
@Column(name = "customer_id", nullable = false)
private String customerId;
}
字符串
我使用下面的jpa存储库保存这个对象。
@Repository
public interface MyTableRepo extends JpaRepository<MyTable, String> {
Optional< MyTable> findById(final String requestId);
}
型
这是用于保存对象的服务类
@Service
@RequiredArgsConstructor
public class MyTableService {
private final MyTableRepo myTableRepo;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public MyTable save(final MyTable myTable){
return myTableRepo.save(myTable);
}
型
调用保存方法在表中插入数据
MyTable mytable = new Mytable();
mytable.setRequestId("someValue");
mytable.setCustomerId("123241");
myTableService.save(mytable);
mytable.getSeqId() // this gives null
型
在使用JPA存储库持久化一条记录之后,我观察到该记录被成功地插入到表中,并带有适当的自动递增值。然而,当使用相关联的实体对象(例如,mytable)检索保存的记录时,自动递增的值不被反映。
我将感谢任何关于这个问题的可能原因的见解和关于潜在解决方案的指导。在使用JPA存储库保存记录之后,如何确保自动递增的值正确地反映在关联的实体对象中?
1条答案
按热度按时间ioekq8ef1#
@GeneratedValue
只能与ID列一起使用,但现在您正在非ID列上使用它,因此它不起作用。有some discussion关于使JPA支持它,但截至今天它仍然不受支持。
如果您只需要
seqId
的一些唯一标识符值,您可以考虑使用UUID
,它可以通过调用UUID.toString()
轻松手动生成。如果你真的需要它是数字的,你可以考虑使用一些分布式的唯一ID生成器,比如Snowflake。一些开源示例可以在here和here上找到。