这是我主表的表结构
@Entity
@Table(name = "POrderListMast")
public class SalesOrder {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "OMN_ID", nullable = false)
private long id;
@JsonSerialize(using = DateTimeSerializer.class)
@Column(name = "OMD_DATE", columnDefinition = "DATETIME", nullable = false, updatable = false)
@CreationTimestamp
private LocalDateTime date;
@Column(name = "CUSTOMERID")
private int customerId;
@Column(name = "OMN_USERCODE")
private int salesManId;
@Column(name = "OMN_PRCGROUPID")
private int priceGroupId;
@Column(name = "CCODE")
private int Ccode = 1;
@Column(name = "OMN_TOTTAX", columnDefinition = "MONEY")
private BigDecimal totalTax;
@Column(name = "OMN_TOTAMT", columnDefinition = "MONEY")
private BigDecimal totalAmount;
@Column(name = "OMN_REFNO")
private String refNumber;
@Column(name = "omc_remarks")
private String remarks;
@Column(name = "omc_deviceid")
private String deviceId;
@Cascade({ CascadeType.SAVE_UPDATE })
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "OMN_ID")
private List<SalesOrderDetail> orderDetails;
}
这是可嵌入的ID表
@Embeddable
public class SalesDetailsId implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OMN_ID", columnDefinition = "BIGINT")
private SalesOrder salesOrderMaster;
@Column(name = "ODN_SLNO", columnDefinition = "BIGINT")
private int slNo;
}
和使用嵌入式ID的表
@Entity
@Table(name = "POrderListDetl")
public class SalesOrderDetail {
@EmbeddedId
private SalesDetailsId salesDetailsId;
@Column(name = "ODC_BARCODE")
private String barcode;
@Column(name = "ODN_ITEMMASTID")
private long itemId;
@Column(name = "ODN_UNITID")
private int unitId;
@Column(name = "ODN_QTY", columnDefinition = "FLOAT")
private int quantity;
@Column(name = "ODN_RATE", columnDefinition = "MONEY")
private BigDecimal rate;
@Column(name = "ODN_VATPER", columnDefinition = "NUMERIC(18,2)")
private double vatPercentage;
@Column(name = "ODN_VATAMT", columnDefinition = "MONEY")
private BigDecimal vatAmount;
@Column(name = "ODN_AMT", columnDefinition = "MONEY")
private BigDecimal netAmount;
}
这是我用于网络服务的json正文
{
"date": "2019-06-27T02:54:13.288",
"customerId": 1,
"salesManId": 1,
"priceGroupId": 1,
"totalTax": 0.624,
"totalAmount": 13.104,
"refNumber": "NZR",
"orderDetails": [
{
"salesDetailsId": {
"slNo": 1
},
"barcode": "701948177570",
"itemId": 550,
"unitId": 1,
"quantity": 2,
"rate": 3.25,
"vatPercentage": 5,
"vatAmount": 0.325,
"netAmount": 6.825
}
]
}
当我尝试使用以下代码保存此
时@Transactional
public Response<Long> saveSalesOrder(SalesOrder salesOrder) {
Session session = entityManager.unwrap(Session.class);
session.saveOrUpdate(salesOrder);
return new ResponseUtil().createResponse((Long) session.getIdentifier(salesOrder));
}
它正在扔
ConstraintViolationException:无法执行语句
原因:com.microsoft.sqlserver.jdbc.SQLServerException:无法将值NULL插入表'POrderListDetl'的'OMN_ID'列中;列不允许为空。 INSERT失败。
如果我删除salesDetailsId
对象并直接添加slno
,则显示另一个异常
org.hibernate.id.IdentifierGenerationException:为以下类生成的空ID:SalesOrderDetail
我的代码有什么问题?