как использовать пользовательский класс в качестве идентификатора JPA - PullRequest
2 голосов
/ 06 февраля 2011

У меня есть собственный класс, который я должен использовать в качестве 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();
}

}

Как я могу использовать это в качестве столбца Id для объекта JPA. Будет ли это по линии

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private ProductId id;

Я получаю вдохновение и рекомендации от кода, созданного Spring ROO

Ответы [ 3 ]

1 голос
/ 06 февраля 2011

Просто определите @IdClass как ваш класс согласно http://www.datanucleus.org/products/accessplatform_3_0/jpa/annotations.html#IdClass и ПК должен соответствовать этим требованиям http://www.datanucleus.org/products/accessplatform_3_0/jpa/primary_key.html

1 голос
/ 06 февраля 2011

Вы можете аннотировать свой класс ID с помощью @Embeddable и аннотировать поле в вашей конечной сущности как @EmbeddedId.

См .: http://download.oracle.com/javaee/6/api/javax/persistence/EmbeddedId.html

0 голосов
/ 01 марта 2011

Если вы строите свои сущности из оболочки roo, вы можете указать класс id, используя параметр --identifierType:

roo> entity --class ~.YourClass --identifierType your.package.ProductId 

Полная ссылка: http://www.springsource.org/roo/guide?w=command-index#command-index-entity

...