Я столкнулся с той же проблемой.
Похоже, @embedable
не работает с @DiscriminatorColumn
. Единственный способ заставить это работать - использовать @DiscriminatorColumn
, но обрабатывать @embedable
как отдельную сущность в той же таблице.
Это означает, что запрос, скорее всего, присоединит таблицу к самому себе.
@Entity
@Table(name="tbComputers")
public class Computer{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public long id;
public String motherboard;
@OneToOne
@JoinColumn(name="id")
public CPU cpu;
}
@Entity
@DiscriminatorColumn(name="cpu_type")
@Table(name="tbComputers")
public abstract class CPU {
@Id
private Long id;
@Column(name = "cpu")
public String name;
public abstract String someProcessorSpecificMethod();
}
@Entity
@DiscriminatorValue("Intel")
public class Intel extends CPU {
@Override
public String someProcessorSpecificMethod() {
return "Intel";
}
}
@Entity
@DiscriminatorValue("AMD")
public class AMD extends CPU {
@Override
public String someProcessorSpecificMethod() {
return "AMD";
}
}
РЕДАКТИРОВАТЬ: После дальнейшего тестирования я обнаружил, что хотя это работает для чтения данных, но не для сохранения. Это создаст отдельную вставку. Похоже, что это не поддерживается https://hibernate.atlassian.net/browse/HHH-1910. Альтернативой является разделение таблицы.