Hibernate и динамическая оболочка для сущности - PullRequest
0 голосов
/ 08 апреля 2011

Вероятно, общая проблема, но в любом случае:

Допустим, у меня есть простая задача Задача со списком объектов Деятельности:

@Entity
@Table(name = "task")
public class Task {

    @Id
    @Column(name = "id")
    private Integer id;

    @OneToMany
    @JoinColumn(name = "task_id")
    private List<Activity> activities;
}

А сущность Activity довольно проста:

@Entity
@Table(name = "activity")
public class Activity {

    @Id
    @Column(name = "id")
    private Integer id;

    @Column(name = "activity_type")
    private int type;
}

И здесь я хочу сделать немного магии - на основе типа Activity, я хочу, чтобы hibernate заполнял Task.activities различными реализациями Activity, например, если Activity.type == 1, я хочу, чтобы там был ActivityAImpl, если Activity. type == 2 - это должно быть ActivityBImpl и т. д. В основном все мои действия реализуют один интерфейс с некоторым методом execute ().

Надеюсь, для этого есть простое решение.

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Не проверял это, но я думаю, что это должно работать ...

@Entity
@Table(name = "activity")
@Inheritance
@DiscriminatorColumn(name = "activity_type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class Activity {

    @Id
    @Column(name = "id")
    private Integer id;
}

@Entity
@DiscriminatorValue("1")
public class ActivityImpl1 extends Activity {

}

@Entity
@DiscriminatorValue("2")
public class ActivityImpl2 extends Activity {

}
0 голосов
/ 08 апреля 2011

Взгляните на аннотации @MappedSuperClass и @Discriminator. Я думаю, это то, что вы ищете. Вот пример .

@Entity
@Table(name = "activity)
@Inheritance
@DiscriminatorColumn(name = "activity_type")
public abstract class Activity {

    @Id
    @Column(name = "id")
    private Integer id;

    @Column(name = "activity_type")
    private int type;

    public abstract void execute();
}

@Entity
@DiscriminatorValue("1")
public class ActivityImplA extends Activity {

     public void execute() {
        .... Impl a
     }

}

@Entity
@DiscriminatorValue("2")
public class ActivityImplB extends Activity {

     public void execute() {
        .... Impl b
     }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...