如何将自定义类用作JPA Id

时间:2011-02-06 07:54:12

标签: hibernate jpa spring-roo

我有一个自定义类,我必须将其用作实体的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生成的代码中获得灵感和指导

3 个答案:

答案 0 :(得分:1)

您可以使用@Embeddable为您的ID类添加注释,并将最终实体中的字段注释为@EmbeddedId

请参阅:http://download.oracle.com/javaee/6/api/javax/persistence/EmbeddedId.html

答案 1 :(得分:1)

答案 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