2013-11-22 8 views
-1

Я пытаюсь сделать следующий случай. Я хочу объявить класс POJO (ClassA) для определения моего класса, но я использую другой класс (ClassB), который расширяет ClassA и имеет бизнес-логику.Я не могу сопоставлять эти классы в спящем режиме

Это тот случай:

//model object 
public abstract class ClassA implements Serializable { 

    private String att1; 
    ... 
    constructors... 
    ... 
    gettters and setters... 
} 

//Business object 
public class ClassB extends ClassA { 

    //With all business logical. 
} 

Таким образом, всегда, что модель изменилась я только нужно изменить CLASSA.

Я пытаюсь это много раз ... Это возможно? Есть ли лучший способ сделать это?

Thanks, Juankar!

+0

Логика бизнеса (а также доступа к данным) не должна быть в вашей модели сущности. –

ответ

0

Читать эту ссылку: Hibernate

можно определить подкласс, союзно-подкласс, и присоединился к подклассу отображение в отдельных документах отображения непосредственно под спящим-отображением. Это позволяет расширить иерархию классов, добавив новый файл сопоставления. Вы должны указать атрибут extends в сопоставлении подкласса, называя ранее сопоставленный суперкласс. Ранее эта функция делала упорядочение картографических документов важными. Начиная с Hibernate3, упорядочение файлов сопоставления не имеет значения при использовании ключевого слова extends. Порядок внутри одного файла сопоставления по-прежнему должен быть определен как суперклассы перед подклассами.

<hibernate-mapping> 
<subclass name="DomesticCat" extends="Cat" discriminator-value="D"> 
     <property name="name" type="string"/> 
</subclass> 

0

У меня есть решение. Таким образом, когда модель изменена, мне нужно только изменить абстрактный класс.

//model object 
@MappedSuperclass 
@Table(name="TABLE_NAME") 
public abstract class ClassA implements Serializable { 

    @Id 
    @GeneratedValue 
    @Basic 
    @Column(name = "COLUMN_NAME") 
    private String att1; 
    ... 
    constructors... 
    ... 
    gettters and setters... 
} 

//Business object 
@Entity 
@Table(name="TABLE_NAME") 
public class ClassB extends ClassA { 

    //With all business logical. 

    //Without field's annotations 
} 

Спасибо большое, Juankar!

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