Java SpringJPA序列缓存提供了意外的行为。使用分配大小=1是可以的
我的Spring Boot应用程序使用a.o.2实体类。实体类1使用使用序列的技术密钥id。该实体包含其他实体的列表,因此是一对多。子实体使用相同的序列 使用20的Sequence分配(缓存)大小,我发现我得到了EntityExistsException: javax.persistence.EntityExistsException:具有 相同的标识符值已与会话关联: [nl.xyz.app1.entity.ChildFields#123456] 这些实体是:Java SpringJPA序列缓存提供了意外的行为。使用分配大小=1是可以的,java,jpa,spring-data-jpa,sequence,id-generation,Java,Jpa,Spring Data Jpa,Sequence,Id Generation,我的Spring Boot应用程序使用a.o.2实体类。实体类1使用使用序列的技术密钥id。该实体包含其他实体的列表,因此是一对多。子实体使用相同的序列 使用20的Sequence分配(缓存)大小,我发现我得到了EntityExistsException: javax.persistence.EntityExistsException:具有 相同的标识符值已与会话关联: [nl.xyz.app1.entity.ChildFields#123456] 这些实体是: @Entity @Table(n
@Entity
@Table(name = "CHILD_FIELDS")
public class ChildFields implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_entity_seq_gen")
@SequenceGenerator(name = "my_entity_seq_gen", sequenceName = "MYSEQ_S01")
@Column(name = "CF_ID", unique = true, nullable = false)
private Long id;
@Column(name = "CF_DETAILS_ID")
private Long detailsId;
及
等。将JPA与DB序列结合使用时要小心。解决方案使用的allocationSize为1。我用Oracle和Progress测试了这一点 您可以通过找到一个很好的解释Puspender Tanwar,给出了详细的解释 通过将序列IncrementBy值更改为我在JPA的allocationSize中设置的值,可以解决这个问题 创建序列“应用程序”。“行\本地数量\ JPA \ ID \ SQ”最小值1最大值 999999999999999999999999999999999999递增20从7641缓存20开始 noordernocycle 上一个序列的问题说明(递增值1):
递增20如何解决了这个问题:当ID在第3步被使用时,JPA要求下一个值进行排序。上一次返回的值是7641,所以这次它将增加20,返回7661。JPA创建从7661到7680的值并使用它们。因此不存在唯一的密钥冲突问题 将JPA与DB序列结合使用时要小心。解决方案使用的allocationSize为1。我用Oracle和Progress测试了这一点 您可以通过找到一个很好的解释Puspender Tanwar,给出了详细的解释 通过将序列IncrementBy值更改为我在JPA的allocationSize中设置的值,可以解决这个问题 创建序列“应用程序”。“行\本地数量\ JPA \ ID \ SQ”最小值1最大值 999999999999999999999999999999999999递增20从7641缓存20开始 noordernocycle 上一个序列的问题说明(递增值1):
@Entity
@Table(name = "PARENTS_OBJECT")
public class ParentObject implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_entity_seq_gen")
@SequenceGenerator(name = "my_entity_seq_gen", sequenceName = "MYSEQ_S01")
@Column(name = "PF_ID", unique = true, nullable = false)
private Long id;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "CF_DETAILS_ID")
private List<ChildFields> children;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_entity_seq_gen" )
@SequenceGenerator(name = "my_entity_seq_gen", sequenceName = "MYSEQ_S01", allocationSize=1)