我是 Hibernate、Spring、JPA 框架的初学者。目前,我正在尝试使用 Spring 3.1.1 - JPA with Hibernate 4 Implementation 创建一个简单的架构。
目前,为了不依赖于我的数据库,我使用 TableGenerator 创建了一些 id:
@Id
@Column(name = "AIR_ID", unique = true, nullable = false)
@TableGenerator(name="aircraftSeqStore",
table="T_S_APP_SEQ_STORE_AST",
pkColumnName="AST_SEQ_NAME",
valueColumnName = "AST_SEQ_VALUE",
pkColumnValue = "T_R_AIRCRAFT_AIR.AIR_ID",
allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE,
generator="aircraftSeqStore")
private Integer id;
经过我的研究,并阅读了“不要让休眠窃取你的身份”文章之后,我真的不明白如何管理我的身份。
我是否应该修改我的实体以用分配的值替换它们(如何在 JPA 中做到这一点?)我是否应该生成一个 UUID 以在创建瞬态对象时直接影响 id?
在许多表中,我有一些简单的数据(id、name)。我以为我可以管理唯一的名称属性上的哈希码和 equals 方法,但在创建对象时也不受影响....(所以我认为相同的 pb 与 id 为空?)。
有关信息,我有一个表示多连接表的实体(此连接表中的 3 个 FK)。
那么你对我有什么建议呢?为性能生成 UUID 还不错吗?
编辑 :
这个实体可行吗?
@Id
@Column(name = "AIR_ID", unique = true, nullable = false)
@TableGenerator(name="aircraftSeqStore",
table="T_S_APP_SEQ_STORE_AST",
pkColumnName="AST_SEQ_NAME",
valueColumnName = "AST_SEQ_VALUE",
pkColumnValue = "T_R_AIRCRAFT_AIR.AIR_ID",
allocationSize=1)
@GeneratedValue(strategy=GenerationType.TABLE,
generator="aircraftSeqStore")
private Integer id;
@Column(name = "AIR_BUSINESS_ID", unique = true, nullable = false)
private String uuid = IdGenerator.createId();
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof Aircraft))
return false;
Aircraft other = (Aircraft)o;
if (uuid == null) return false;
return uuid .equals(other.getUuid ());
}
public int hashCode() {
if (uuid != null) {
return uuid .hashCode();
} else {
return super.hashCode();
}
}
谢谢你。