2013-03-04 2 views
0

У меня есть три класса, которые выглядят так.промежуточное `@ MappedSuperclass` не удалось сохранить

@Entity 
class A { 

    @Id @GeneratedValue @TableGenerator 
    private long id; 
} 

@MappedSuperclass 
abstract class B extends A { 
} 

@Entity 
class C extends B { 
} 

Должно ли быть выше даже работы? И, похоже, это не работает, по крайней мере, с EclipseLink.

У меня есть Column 'ID' cannot be null, когда я пытался сохранить экземпляр C.

Я нашел ошибку в Inheritance with abstract intermediate class using @MappedSuperclass fails to populate subclasses, но я не уверен, что это точно такая же ситуация или нет.

UPDATE на @ ответ Джеймса

извини, я должен написан более пространно. Да, я намереваюсь наследование SINGLE_TABLE. У меня нет расширенного имущества с B или C. Это всего лишь иерархический класс.

@DiscriminatorColumn 
@Inheritance(strategy = InheritanceType.SINGLE_TABLE) 
@Entity 
abstract class A { 

    @Id @GeneratedValue @TableGenerator 
    private long id; 
} 

@DiscriminatorValue("B") @Entity // I currently should do like this. 
//@MappedSuperclass    // error 
abstract class B<T extends SomeoneElse> extends A { 
} 

@DiscriminatorValue("C") 
@Entity 
class C extends B<James> { 
} 

ответ

1

Я считаю, что в JPA @MappedSuperclass должен быть суперкласс не подкласс (как его имя выводит).

Я не уверен, что будет иметь подкласс @Entiy как @MappedSuperclass?

Что вы пытаетесь сделать?

Для наследования @Entity JPA предоставляет только три варианта: SINGLE_TABLE, JOINED и TABLE_PER_CLASS. Все подклассы persistence должны быть сущностями.

Я предполагаю, что вы используете НАСЛЕДОВАТЕЛЬНОЕ наследование и пытаетесь избежать таблицы для B. JPA не указывает стандартный способ сделать это. В EclipseLink вы можете избежать таблицы, указав ее таблицу родительской (@Table (name = "A")).

+0

Не могли бы вы взглянуть на [link] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=294108) и посмотреть, что это актуально? –