| I have the following entities: {{@Entity @Table(name = "A") public class A extends ... { @ManyToOne(cascade = {CascadeType.REFRESH} ) @JoinColumn(name = "B_ID", nullable = false) private B b; ... } @Entity @Table(name = "B") @Inheritance(strategy = InheritanceType.JOINED) public abstract class B extends ... { ... } @Entity @Table(name = "B1") public class B1 extends B { @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "C_ID", nullable = true) private C c; ... } @Entity @Table(name = "B2") public class B2 extends B { @Embedded private CommonPart p; ... } @Embeddable public class CommonPart implements Serializable { @OneToOne(cascade = {CascadeType.ALL} , fetch = FetchType.EAGER) @JoinColumn(name = "D_ID", referencedColumnName = "ID") private D d; ... } @Entity @SequenceGenerator(name = "ID_GENERATOR", sequenceName = "C/D_S", allocationSize = 1, initialValue = 1) @Table(name = "C/D") @Inheritance(strategy = InheritanceType.JOINED) public class C/D extends ... { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR") @Column(name = "ID") protected Long id; ... } }} But when I try to retrieve an A entity, Hibernate attempts to execute the following, illegal query to resolve the join with B: {{SELECT b0_.id AS ID1_204_0_, ... b0_1_.c_id AS C_ID5_201_0_, ... b0_2_.d_id AS D_ID_T9_202_0_, CASE WHEN b0_1_.id IS NOT NULL THEN 1 WHEN b0_2_.id IS NOT NULL THEN 2 WHEN b0_.id IS NOT NULL THEN 0 END AS clazz_0_, ... c5_.id AS ID1_205_5_, ... d6_.id AS ID1_130_6_, .... FROM b b0_ LEFT OUTER JOIN B1 b0_1_ ON b0_.id = b0_1_.id LEFT OUTER JOIN B2 b0_2_ ON b0_.id = b0_2_.id ... LEFT OUTER JOIN C c5_ ON b0_1_.c_id = c5_.id LEFT OUTER JOIN D d6_ ON b0_1_.d_id = d6_.id WHERE b0_.id = ? }} which obviously fails. |