2012-05-07 3 views
1

Давайте предположим, что я определил следующие Entity:Entity с двумя идентификаторами

@Entity 
class User{ 

    @Id 
    @GeneratedValue 
    @Column(name = "DB_ID") 
    private long id; 

    @Id 
    @Column(name = "LOGIN", unique = true) 
    private String code; 

//setters, getters 
} 

Вопрос № 1.
Когда я использую метод .find(User.class, someId), какой ID мне нужно установить? Должен ли я использовать идентификатор длинного поля или код поля String? Или я могу использовать идентификатор длинного поля и код поля String одновременно?

Вопрос №2.
Если я хочу использовать метод .merge(user), в этом случае запись будет обновлена?
дело № 1: - идентификатор равна DB_ID, код не равен LOGIN
дело № 2: - идентификатор не равен DB_ID, код равен LOGIN
дело № 3: - idequals DB_ID и код равен LOGIN
или любое другое условие?

+3

Являются ли эти идентификаторы независимыми? Если это так, нет никакого способа сделать это, объект должен иметь ровно один id (который может состоять из нескольких полей, хотя). В вашем случае «DB_ID» может быть фактическим id, а столбец «LOGIN» может иметь только уникальное ограничение и должен использоваться в запросе. – Thomas

ответ

5

Любой класс, который имеет составной id (несколько полей Id) должен иметь свой собственный IdClass, определенный (который вы еще не сделали). Экземпляр IdClass - это то, что вы затем передаете EM.find. Это достаточно легко найти в спецификации JPA

-1

Для вопроса 1 вы должны пройти только длинный идентификатор, потому что это первичный ключ для вашего стола, и вам нужно найти его на основе.

+0

Первичный ключ является составным. –

Смежные вопросы