如何为Oracle数据库生成唯一序列号

时间:2013-06-10 07:19:53

标签: java oracle jpa

我们的应用程序有几个实体,并使用MySQL数据库开发。我们所有的实体extends都是一个共同的基础实体。

@MappedSuperclass
public class BaseEntityData implements Serializable
{
    /**
     * Data identifier (Usually holds Primary Key)
     */
    private Long id;

    /**
     * @return the id
     */
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    public Long getId()
    {
        return id;
    }

    /**
     * @param value the id to set
     */
    public void setId(final Long value)
    {
        this.id = value;
    }
}

我们所有的实体都扩展了BaseEntityData,一切都在MySQL数据库上完美运行。在开发期间,我们没有在Oracle database上进行测试。我们现在要测试不同客户端要求的Oracle database cos,但发现Oracle database不生成主键的序列号,有时会生成重复键。如何修改此超类BaseEntityData以便为所有表生成唯一键。有超过300个实体在扩展这个超类。

1 个答案:

答案 0 :(得分:2)

名字少马是对的。对于oracle,您需要创建一个序列并使用它来生成ID。

注释将如下所示

@id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ENTITY_SEQUENCE")
@SequenceGenerator(name="ENTITY_SEQUENCE", sequenceName="ENTITY_SEQUENCE")

看起来你要在一个旨在扩展的超类中定义id。如果是这种情况,请强烈考虑将ID移动到子类级别。在具有许多对象的大型企业应用程序中,您可能希望为单独的实体使用单独的ID序列。