2015-12-08 2 views
1

Я хочу создать primary composite key и использовать поле @Id из родительского класса. Но это не работает. Зачем?Как наследовать @Id из сопоставленного суперкласса?

@MappedSuperclass 
static abstract class SuperEntity { 
    @Id 
    private Long id; 
} 

@Entity 
@IdClass(SuperPK.class) 
public static class ChildEntity extends SuperEntity { 
    @Id 
    private String lang; 
} 


public class SuperPK { 
    public SuperPK(Long id, String lang) { 
     //... 
    } 
} 

Результат: Property of @IdClass not found in entity ChildEntity: id

+1

Возможный дубликат [Составной ключ в JPA/Hibernate с унаследованным классом] (http://stackoverflow.com/questions/4216102/composite-key-in-jpa-hibernate-with-inherited-class) –

ответ

1

Я нашел open issue об этой ошибке.

В одном из комментариев говорится о переопределении геттеров для свойств ID в качестве обходного пути.

@Entity 
@IdClass(SuperPK.class) 
public static class ChildEntity extends SuperEntity { 
    @Id 
    private String lang; 

    @Override @Id 
    public Long getId() { 
     return super.getId(); 
    } 
}