Spring Data JPA不会一对多填充子表

时间:2018-12-04 08:02:16

标签: java spring-boot spring-data-jpa

我有这样的JSON:

{
  "pcSignatureHash": "String",
  "pcSignature": "String",
  "infectedBy": "String",
  "agent": {
    "userCode": 0
  },
  "pc": {
    "name": "String",
    "userName": "String",
    "osType": "String",
    "domainName": "String",
    "cpuId": "String",
    "osVersion": "String",
    "macId": "String",
    "vm": true,
    "friendlyName": "String",
    "statuses": [
      {
        "firewall": true,
        "firewallTestDate": "String"
      }
    ]
  }
}

它不在数据库中存储状态。

感染个人电脑具有1对1的关系,而个人电脑与状态具有1对多的关系。

已正确设置模型,例如1的Infections中有PCs且PC中有Set<Statuses>,而Statuses的模型中有PCs

还有其他方法可以存储数据吗? 如果我分别存储状态没道理,它将存储两次PC,因为我们需要将PC对象作为外键传递。

2 个答案:

答案 0 :(得分:0)

您没有正确理解关系映射。在一对多关系中,一侧与@OneToMany,另一侧与@ManyToOne

答案 1 :(得分:0)

您的实体应如下所示。 请进行相应的修改。

购物车实体

@Entity
@Table(name="CART")
public class Cart {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="cart_id")
private long id;

@Column(name="total")
private double total;

@Column(name="name")
private String name;

@OneToMany(mappedBy="cart")
private Set<Items> items;

// Getter Setter methods for properties

}

项目实体

@Entity
@Table(name="ITEMS")
public class Items {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private long id;

@Column(name="item_id")
private String itemId;

@Column(name="item_total")
private double itemTotal;

@Column(name="quantity")
private int quantity;

@ManyToOne
@JoinColumn(name="cart_id", nullable=false)
private Cart cart;
// Getter Setter methods for properties

}