当前位置: 首页 > 知识库问答 >
问题:

使用不同hibernate版本但相同oracle数据库的2个应用程序引发唯一约束错误

刘丰羽
2023-03-14

有两个应用程序:一个是使用Spring Boot-1.5.18.发布版本,它的hibernate版本为5.0.12.final

:https://search.maven.org/artifact/org.springframework.boot/spring-boot-dependencies/1.5.18.release/pom

而在第一次应用程序中不需要分配大小。

数据库序列是用“增量1”创建的,两个应用程序都使用相同的oracle数据库。

这2个应用程序使用许多相似的实体,这些实体复制在另一个应用程序/项目中。

@Entity
@Table(name = "MERCURY_INSTANCE")
public class MercuryInstance implements Serializable {

    @Id
    @Column(name = "MERCURY_INSTANCE_KEY", nullable = false)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGen")
    @SequenceGenerator(name = "seqGen", sequenceName = "MERCURY_INSTANCE_SEQ")
    private Long mercuryInstanceKey;

    @ManyToOne(cascade = CascadeType.DETACH, fetch = FetchType.LAZY)
    @JoinColumn(name = "MERCURY_KEY", referencedColumnName = "MERCURY_KEY", nullable = false)
    private MERCURY mercury;

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "MERCURY_INSTANCE_KEY", referencedColumnName = "MERCURY_INSTANCE_KEY", nullable = false)
    private MercuryInstanceTechParams MercuryInstanceTechParams;

    @ManyToMany(mappedBy = "mercuryGroupInstances")
    private List<MercuryGroupInstance> MercuryGroupInstances;
    
    @Column(name = "CREATED_DATE")
    private Timestamp createdDte;
    @Column(name = "CREATED_BY")
    private String createdBy;
    @Column(name = "UPDATED_DATE")
    private Timestamp updatedDte;
    @Column(name = "UPDATED_BY")
    private String updatedBy;
    /* getter and setters of above fields */

}
@Id
@Column(name = "MERCURY_INSTANCE_KEY", nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGen")
@SequenceGenerator(name = "seqGen", sequenceName = "MERCURY_INSTANCE_SEQ", allocationSize = 1)
private Long mercuryInstanceKey;

而数据库序列是:

创建序列“mercury_instance_seq”MINVALUE 1 MAXVALUE

共有1个答案

谭安翔
2023-03-14

@SequenceGenerator默认情况下的分配大小为50。首先,最佳做法是将分配大小与db序列中的increment by值对齐。

该值往往取决于应用程序是读密集型还是写密集型。此外,您还必须考虑性能(如果它经常写入db,较低的值可能会导致性能问题)。如果您的应用程序是只读应用程序,那么使用分配大小1000或1的影响可以忽略不计。

下一代序列Id基于AllocationSize。

@sequenceGenerator(name=“seqgen”,sequenceName=“mercury_instance_seq”,allocationsize=1)

 类似资料:
  • 问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。但是,由于其中一个数据库包含公共实体,因此应该共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2,“

  • 它的方法是应用唯一的两列约束模型使用peewee。有原始的方法(使用),但我正在寻找另一种方法。 我使用postgres,所以我试图像@booshong下面说的那样做,然后在原始SQL我给出了以下内容(为了简单起见,与事务相关的和省略并输出): 正如我们所看到的,正如我前面所说,这是不同的事情。

  • 我遇到一个情况,需要根据另一个列值对一个列[属性]强制执行唯一约束。 例如,我有一个像table(ID,EID,Name,ISDeleted)这样的表 ISDeleted只能有一个值null或'y'(active或deleted),并且我想在EID上创建一个唯一的约束,仅当ISDeleted=null时才创建ISDeleted,因为我不关心是否有多个具有相同ID的已删除记录。请注意,EID可以为空

  • 我有一个spring项目,想在数据库中强制一个字段的唯一性,并将错误消息返回给UI。 我已经阅读了这个SO答案,它是有意义的,所以@Col的(唯一=真)使表上的约束,但不强制它。 因此,问题变成了如何创建一个@Unique注释,该注释与数据库进行检查,并在POST处理程序上向BindingResult返回错误消息。 一个例子会很棒。 更新 我尝试了以下方法来制作自定义验证器: 对象(请注意,我添加

  • 主要内容:Oracle唯一约束语法,Oracle唯一约束例子在本教程中,您将学习如何使用Oracle唯一约束来确保包含在一列或几列中的数据在表中的行之间是唯一的。 Oracle唯一约束语法 一个唯一的约束是一个完整性约束,它确保存储在一列或一组列中的数据在表中的行之间是唯一的。 通常,在使用内联约束语法创建表时,将唯一约束应用于列,如下所示: 此唯一约束指定中的值在整个表中是唯一的。也可以使用外线()约束语法来定义一个唯一的约束: 可以通过使用子句和约束名

  • 问题内容: 语境 我正在创建一个数据库环境,在该环境中,我想以几种不同的模式拆分数据以用于不同的用户组。虽然,由于其中包含公共实体,所以应该将这些数据库之一共享给所有人。 假设数据库: DB1-通用实体; 车轮实体 DB2-组“ A”; 汽车实体 DB3-组“ B”; 摩托车实体 我有三个不同的项目: 项目1: 车轮豆 专案2: 汽车制造商 专案3: 摩托车构造者 问题 我正在尝试从项目/方案(2