使用单表策略的java持久化Hibernate继承映射
我使用单表策略来持久化数据,我的(示例)结构如下所示:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Musician {
@Id
private Integer id;
private String name;
// getters, setters
}
有这样的子类:
@Entity
public class MusicianGuitar extends Musician {
}
@Entity
public class MusicianVocals extends Musician {
}
每个子类也有自己的repository类,其外观如下:
public interface MusicianGuitarRepository extends JpaRepository<MusicianGuitar, Integer> {
}
public interface MusicianVocalRepository extends JpaRepository<MusicianVocal, Integer> {
}
我正在从源代码中读取它们的集合,但我想编写可重用的保存方法。。这就是我目前拥有的:
private void saveGuitarists(List<MusicianGuitar> guitarists) {
for (MusicianGuitar guitarist : guitarists) {
MusicianGuitar existingGuitarist = guitaristRepository.findByName(guitarist.getName());
if (existingGuitarist == null) {
MusicianGuitar newGuitarist = new MusicianGuitar();
newGuitarist.setName("Slash");
guitaristRepository.save(newGuitarist);
}
}
}
。。同样适用于歌手、鼓手等
问题是,我必须为我目前拥有的每种类型的音乐家写出这种方法,如果以后添加了新类型,我将不得不再次写出这种方法——在这个例子和我的实际例子中,对象具有所有相同的字段,它们只是不同的类型。我考虑过通过音乐家枚举类型,但这并没有让事情变得更简单。我怀疑有某种方法可以利用继承映射,但不知道如何。。提前谢谢
# 1 楼答案
你可以试着用类似的东西