hibernate JPA存储库中保存记录的自动增值反映不一致

wswtfjt7  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(119)

我有一个实体类,它具有以下字段。

@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存储库保存记录之后,如何确保自动递增的值正确地反映在关联的实体对象中?

ioekq8ef

ioekq8ef1#

@GeneratedValue只能与ID列一起使用,但现在您正在非ID列上使用它,因此它不起作用。
some discussion关于使JPA支持它,但截至今天它仍然不受支持。
如果您只需要seqId的一些唯一标识符值,您可以考虑使用UUID,它可以通过调用UUID.toString()轻松手动生成。
如果你真的需要它是数字的,你可以考虑使用一些分布式的唯一ID生成器,比如Snowflake。一些开源示例可以在herehere上找到。

相关问题