我有一个自定义类,我必须将其用作实体的Id。它看起来如下
public class ProductId {
private final String id;
public ProductId(String id) {
this.id = id;
}
public String getId() {
return id;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof ProductId)) {
return false;
}
ProductId productId = (ProductId) o;
if (!id.equals(productId.id)) {
return false;
}
return true;
}
@Override
public int hashCode() {
return id.hashCode();
}
}
如何将此作为JPA实体的Id列使用。是否符合
的要求@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private ProductId id;
我从Spring ROO生成的代码中获得灵感和指导
答案 0 :(得分:1)
您可以使用@Embeddable
为您的ID类添加注释,并将最终实体中的字段注释为@EmbeddedId
。
请参阅:http://download.oracle.com/javaee/6/api/javax/persistence/EmbeddedId.html
答案 1 :(得分:1)
只需将@IdClass定义为您的类 http://www.datanucleus.org/products/accessplatform_3_0/jpa/annotations.html#IdClass PK应符合这些要求 http://www.datanucleus.org/products/accessplatform_3_0/jpa/primary_key.html
答案 2 :(得分:0)
如果要从roo shell构建实体,可以使用--identifierType
参数指定id类:
roo> entity --class ~.YourClass --identifierType your.package.ProductId
完整参考:http://www.springsource.org/roo/guide?w=command-index#command-index-entity