请参考所附的屏幕截图以了解表结构。
Empd_Id是“ Employee”表中的主键,该表又与表中的“ product”中的“ product_id”一起成为组合键的一部分。 任何员工都可以拥有多个产品,因此在这种情况下,它成为“员工-产品”表之间的“一对多”关系。现在我很困惑,我是否只需要编写1个JpaRepository接口(即用于员工)或2个JpaRepository接口(1个用于Employee,另一个用于Product)。我的直觉只是Employee表的1个界面,但是如何?
以下是我的代码段:- 第一个JPA存储库界面
public interface MyRepository extends JpaRepository<Product, EmpProd> {
}
实体:-
@Entity
@Table(name="product")
public class Product{
@EmbeddedId
private EmpProd empProd;
@Column(name="product_name")
private String commerceUserId;
@Column(name="description")
private String description;
对于复合键:-
@Embeddable
public class EmpProd implements Serializable{
private static final long serialVersionUID = 1L;
@NotNull
@Column(name="emp_id")
private String empId;
@NotNull
@Column(name="product_id")
private String productId;
第二个Jpa存储库界面
public interface MyMainDataRepository extends JpaRepository<Employee, String> {
}
实体类:-
@Entity
@Table(name="employee")
public class Employee{
@Id
@NotNull
@Column(name="emp_id")
private String empId;
@Column(name="first_name")
private String firstName;
尽管我已经编写了2个独立的JPA存储库,但我坚信只需要1个,即主要的
公共接口MyMainDataRepository扩展了JpaRepository { }
但是我不知道相关的实体类和使用单一Jpa存储库获取数据,因为我是Spring Data JPA的新手。如果有人可以在这里帮助我,我将不胜感激。谢谢
答案 0 :(得分:1)
就JPA而言,两个实体Product
和Employee
没有任何联系。因此,您无法通过单个存储库访问这两者。
例如,如果Product
实际引用了Employee
,则可以使用ProductRepository
加载Product
,然后从那里导航到引用的{{ 1}} s。
但是,即使这可行,我猜Employee
和Product
应该被认为是不同的集合,因此应该各自拥有自己的存储库。有关该问题的更多信息,请参见Are you supposed to have one repository per table in JPA?。
鉴于实体,您的存储库看起来还不错。请注意,由于使用了Employee
而不是String productId
,这些实体看起来确实是非典型的。
答案 1 :(得分:0)
如果要获取员工详细信息,则需要以下界面,
//get the "valueList" from response
if let valueList = obj["valueList"] as? [[String: Any]] {
//get the conId from [String: Any]
for item in valueList {
if let conId = item["conId"] as? String {
print(conId)
}
}
}
如果要获取产品详细信息,则需要以下界面,
public interface MyMainDataRepository extends JpaRepository<Employee, String> {
}
员工与产品表相关,迭代通过产品和相关员工进行。因此,您无法直接访问employee表并从MyRepository界面检索员工结果。