JPA повторное использование кода путем расширения без наследования - PullRequest
1 голос
/ 14 марта 2012

У меня две или более таблиц похожи друг на друга.

PARENT
  ID   | PK
  NAME | VARCHAR

CHILD
  ID   |PK
  NAME | VARCHAR
  AGE  | INT

Это не @Inheritance ситуация, потому что они являются независимыми объектами и связаны друг с другом @OneToMany или @ManyToOne.

Я создаю класс сущностей друг для друга.

@Entity
public class Parent {
    @Id
    private Long id;
    private String name;
    @ManyToOne(mappedBy = "parent")
    private Collection<Child> children;
}

@Entity
public class Child {
    @Id
    private Long id;
    private String name;
    private int age;
    @OneToMany
    private Parent parent;
}

Есть ли какой-нибудь хороший способ поделиться отображениями общих полей?

// @MappedSuperclass // is this what it is exactly for? 
public abstract class Base {
    // @Id protected Long id; // @@?
    @Column(name = "name", nullable = false)
    private String name;
}

@Entity
public class Parent extends Base {
    @Id
    @TableGenerator(...)
    @GeneratedValue(...)
    protected Long id;
    @ManyToOne(mappedBy = "parent")
    private Collection<Child> children;
}

@Entity
public class Child extends Base {
    @Id
    @TableGenerator(...)
    @GeneratedValue(...)
    protected Long id;
    private int age;
    @OneToMany
    private Parent parent;
}

Это нормально?Возможно ли даже объявить @Id protected Long id; на базе, оставив @TableGenerator и @GeneratedVAlue в расширенных классах?

1 Ответ

2 голосов
/ 14 марта 2012

Есть ли хороший способ поделиться отображениями общих полей?

MappedSuperclass - это как раз то, что нужно для этого.

Возможно ли даже объявить @Id защищенный Long ID; на базе оставить @TableGenerator и @GeneratedVAlue для расширенных классов?

Нет, это невозможно.

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