Hibernate Single_Table персистентность У сущности нет атрибута первичного ключа, определенного в подклассе - PullRequest
2 голосов
/ 25 октября 2011

Добрый вечер. Я пытаюсь сопоставить иерархию классов с одной таблицей с помощью JPA / Hibernate и получаю сообщение об ошибке в моем подклассе, в котором говорится: «У сущности не определен атрибут первичного ключа». Классы определены следующим образом:

@Entity
@Table(name = "payments")
@Inheritance (strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="creditDebitFlag",discriminatorType=DiscriminatorType.STRING)
@Veto
public abstract class Payment implements IPayment, Serializable{

private static final long serialVersionUID = 8354755060201271169L;
public Integer id;
     ...

@Override
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
public void setId(Integer id) {
    this.id = id;
}

@Override
public Integer getId() {
    return this.id;
}
}
@Entity
@DiscriminatorValue("C")
@Veto
public class CreditPayment extends Payment implements Serializable {


    private static final long serialVersionUID = 1L;

public CreditPayment() {
    super();
}   
}

Что я делаю не так? Я прочитал Hibernate docs и потратил немало времени, копаясь в Google, и не вижу, что пропустил.

Заранее благодарим за помощь!

1 Ответ

3 голосов
/ 25 октября 2011

Ваша проблема не имеет ничего общего с наследованием. Эта ошибка возникает, потому что у вас есть аннотации отображения постоянства в сеттере. Эти аннотации должны быть в полях или получателях. В этом случае просто переместите аннотации из setId в getId (а если у вас есть эти аннотации для других сеттеров, переместите их также).

JPA спецификация:

Когда используется доступ на основе свойств, объект / реляционное отображение аннотации для класса сущности аннотируют свойство получателя аксессоры [7] ....
[7] Эти аннотации не должны применяться к методам установки.

...