JPA2 PrimaryKey与Oracle主键

时间:2013-03-07 19:38:26

标签: oracle jpa-2.0

oracle表是否可能有复合主键oracle sequenceid + createtimestamp但是@Entity类我们只有@id(sequenceid)主键?我们正在为表分区添加时间戳,我们稍后会用它们进行清除。在存储实体时,我们将始终添加时间戳值。从数据的角度来看,在这种情况下,id本身就是记录的主键。我可以创建主键作为id的实体吗?

2 个答案:

答案 0 :(得分:0)

在这种情况下,您必须在@ Entity类中创建复合主键。您可以按照以下示例

@Entity
@Table(name="RELEASE_PERSON")
@IdClass(ReleasePersonPK.class)
public class ReleasePerson implements Serializable {

@Column(name="ORDER_NO", nullable=false, precision=2)
private Integer orderNo;

@Id
@Column(name="RELEASE_ID", insertable=false,updatable=false)
private long releaseId;

@Id
@Column(name="PERSON_ID", insertable=false,updatable=false)
private long personId;

@ManyToOne
@JoinColumn(name = "PERSON_ID", referencedColumnName = "PERSON_ID")
private Person person;

@ManyToOne
@JoinColumn(name = "RELEASE_ID", referencedColumnName = "ID")
private Release release;

您的Id类将如下所示

@Embeddable
public class ReleasePersonPK implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = -6286499269052596345L;

private Person person;

private Release release;

在我在ReleasePersone表中的示例中,我们将使用来自rRelease(ID)和Person(Person_id)的复合主键。

如果您还有其他需要,请告诉我。

答案 1 :(得分:0)

答案是肯定的。正如你所说的那样,id在表格中是唯一的,只要将sequenceId作为PK放在实体中就可以了。如果您不使用hibernate来创建表或更新表的列,那么它并不关心数据库中的实际内容。