JPA не работает с generic и OneToOne? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть 2 абстрактных класса, A & G, и у каждого есть 2 класса реализации

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
abstract class A {
    @Id
    protected String id;
}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type")
abstract class G<T extends A> {
  @Id
  protected String id;

  @OneToOne(cascade = CascadeType.ALL)
  protected T theA;
}

// ------------------- implemenation classes -------------------

@Entity
@DiscriminatorValue("1")
class A1 extends A {
}

@Entity
@DiscriminatorValue("2")
class A2 extends A {
}

@Entity
@DiscriminatorValue("1")
class G1 extends G<A1> {
}

@Entity
@DiscriminatorValue("2")
class G2 extends G<A2> {
}

// ---------------------- Test codes ----------------------

A2 a2 = new A2();
G2 g2 = new G2();
g2.setTheA(a2);
entityManager.persist(g2);

И я проверил БД, поле «тип» таблицы «G» равно 2, как и ожидалось, но «тип» в таблице «А» равно 1, поэтому, если я найду (G2.class, theID). getTheA (), будет ClassCastException: приведение A1 к A2

Может ли это быть из-за общего в классе G, или это неправильный дизайн класса?

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