次のような JPA MappedSuperClass があります。
@MappedSuperclass
public abstract class Foo extends AbstractPersistable<Long> {
private Status status;
@ManyToOne(cascade=CascadeType.ALL)
private User owner;
そして、Foo から継承する 2 つのサブクラスは、次のように定義されます。
@Entity
@Table(name="BARFOO")
@EqualsAndHashCode(callSuper=true)
@PrimaryKeyJoinColumn(name="id", referencedColumnName="id")
public @Data class Bar extends Foo {
private String beer;
と
@Entity
@Table(name="BLUBFOO")
@EqualsAndHashCode(callSuper=true)
@PrimaryKeyJoinColumn(name="id", referencedColumnName="id")
public @Data class Blub extends Foo {
private String cider;
ここで、タイプ Bar または Blub のオブジェクトにデータを保存すると、myRepository.findAll が実際にサイダーまたはビールと、MappedSuperClass からステータスと所有者の両方を返すことを期待します。代わりに、サブクラスのプロパティであるサイダーまたはビールを返すだけです。
私の推論に誤りがあるだけですか、それとも完全に何かを見逃していますか?
これは私の BarRepository です:
public interface BarRepository extends JpaRepository<Bar, Long> {
}
そして、これが私の BarService の findAll() が「実装」される方法です。
@Inject
private BarRepository barRepository;
public Iterable<Bar> findAll() {
return barRepository.findAll();
}
Blub サブクラスにも両方あります。ヒントをいただければ幸いです。ベスト プラクティスを見逃した場合は、もう一度正しい軌道に乗せていただければ幸いです。