当我使用大约100多个实体的数据源时,我使用了以下方法,以便不为每个实体创建存储库。我主要用于仅将信息从源保存到我们的数据库中。但是也有一些关于如何检索数据的想法。
创建@MappedSuperclass的主要思想: "最初的回答"
@MappedSuperclass
public abstract class SuperClass {
@Id
@GeneratedValue
private Integer id;
public SuperClass() {
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
然后扩展所有其他实体:
最初的回答
@Entity
public class Class1 extends SuperClass {
private String classInfo;
public String getClassInfo() {
return classInfo;
}
public void setClassInfo(String classInfo) {
this.classInfo = classInfo;
}
@Override
public String toString() {
return "\nClass1{" +
"classInfo='" + classInfo + '\'' +
'}';
}
}
@Entity
public class Class2 extends SuperClass {
private String classInfo;
public String getClassInfo() {
return classInfo;
}
public void setClassInfo(String classInfo) {
this.classInfo = classInfo;
}
@Override
public String toString() {
return "\nClass2{" +
"classInfo='" + classInfo + '\'' +
'}';
}
}
在这种情况下,您的代码库将是:
public interface SuperRepository extends JpaRepository<SuperClass, Integer> {
}
"最初的回答":并且您可以应用它:
Class1 class1 = new Class1();
class1.setClassInfo("Class1 info");
Class2 class2 = new Class2();
class2.setClassInfo("Class2 info");
superRepository.save(class1);
superRepository.save(class2);
Hibernate将创建
Class1和
Class2表,并填充它们的数据。
下一步是如何检索数据。
我建议这样的方法-在这个存储库中为每个类创建查询:
public interface SuperRepository extends JpaRepository<SuperClass, Integer> {
@Query("select c from Class1 c")
List<Class1> findAllClass1();
@Query("select c from Class2 c")
List<Class2> findAllClass2();
}
Then when you apply this:
System.out.println(superRepository.findAllClass1());
System.out.println(superRepository.findAllClass2());
你将会得到:
[类1{类信息='类1信息'}]
[类2{类信息='类2信息'}]
注:Original Answer翻译成"最初的回答",但是在提供的内容中并没有这个词汇。
@Repository
,它没有任何作用。 - M. Deinum