0

我们的应用程序有几个实体,是用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 个实体扩展了这个超类。

4

1 回答 1

2

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

注释将如下所示

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

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

于 2013-06-10T07:48:54.370 回答