我们的应用程序有几个实体,并使用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个实体在扩展这个超类。
答案 0 :(得分:2)
名字少马是对的。对于oracle,您需要创建一个序列并使用它来生成ID。
注释将如下所示
@id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="ENTITY_SEQUENCE")
@SequenceGenerator(name="ENTITY_SEQUENCE", sequenceName="ENTITY_SEQUENCE")
看起来你要在一个旨在扩展的超类中定义id。如果是这种情况,请强烈考虑将ID移动到子类级别。在具有许多对象的大型企业应用程序中,您可能希望为单独的实体使用单独的ID序列。