【问题标题】:JPA2 PrimaryKey vs Oracle Primary keyJPA2 PrimaryKey 与 Oracle 主键
【发布时间】:2013-03-07 19:38:26
【问题描述】:

oracle 表是否有可能有一个复合主键 oracle sequenceid +createtimestamp 但@Entity 类我们只有@id (sequenceid) 主键?我们添加的时间戳是为了以后用于清除的表分区。在存储实体时,我们将一直添加时间戳值。从数据的角度来看,在这种情况下,id 是记录的主键。我可以单独使用主键作为 id 创建实体吗?

【问题讨论】:

  • “PriamryKey”?你确定你拼错了吗?
  • PrimaryKey 我的意思是 :-)

标签: oracle jpa-2.0


【解决方案1】:

在这种情况下,您必须在 @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 Class 如下所示

@Embeddable
public class ReleasePersonPK implements Serializable {

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

private Person person;

private Release release;

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

如果您还需要什么,请告诉我。

【讨论】:

  • 谢谢。我的问题更多的是关于我们是否可以在 oracle 上使用复合键,在 jpa @Entity 类上使用非复合键。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 2013-04-23
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    相关资源
    最近更新 更多