第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將子級(jí)添加到現(xiàn)有父級(jí)時(shí)休眠一對(duì)多 IntegrityConstraint

將子級(jí)添加到現(xiàn)有父級(jí)時(shí)休眠一對(duì)多 IntegrityConstraint

開滿天機(jī) 2022-05-12 18:58:14
我有一個(gè) Hibernate + Spring Boot 應(yīng)用程序,并且在通過添加子項(xiàng)來更新父項(xiàng)時(shí)收到 IntegrityConstraintViolationException。數(shù)據(jù)庫架構(gòu)是:table order (  id (primary key auto generated),);table order_line (  order_id (primary key + foreign key to order.id),  order_line_id (primary key set manually set in the code),)在java中:@Getter@Setter@Entity(name = "ORDER")public class Order {    @Id    @GeneratedValue(strategy= GenerationType.AUTO)    private Integer id;@Getter@Setter@Entity(name = "ORDER_LINE")public class OrderLine implements Serializable{    @Id    private Integer orderLineId;    @Id    @ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(referencedColumnName = "id", columnDefinition = "Integer", insertable = false, updatable = false)    private Order order;要?jiǎng)?chuàng)建訂單,我使用 JpaRepository 并創(chuàng)建我的對(duì)象,如下所示:    Order order = new Order();    order.setId(118); //This is an existing order ID which should be updated    Set<OrderLine> orderLines = new HashSet<OrderLine>();    OrderLine orderLine = new OrderLine();    orderLine.setOrderLineId(0); //This is an existing order line    orderLine.setOrder(order);    orderLines.add(orderLine);    orderLine = new OrderLine();    orderLine.setOrderLineId(1); //This is a non-existing order line    orderLine.setOrder(order);    orderLines.add(orderLine);    order.setOrderLines(orderLines);    orderRepository.save(order);for (OrderLine orderLine : order.getOrderLines()) {    orderLine.setOrder(order);}orderRepository.save(order);這段代碼的作用是:創(chuàng)建具有 0、1 或更多孩子的新父母(意思是,我沒有設(shè)置 orderId)更新父字段和/或任何子字段(在上面的示例中,如果我不添加第二個(gè) orderLine,一切正常)刪除子行但是不起作用的是向現(xiàn)有父級(jí)添加一行。這會(huì)導(dǎo)致以下異常:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:sun.reflect.NativeConstructorAccessorImpl.newInstance0(本機(jī)方法)的列“ORDER_LINE_ID”不能為空我不明白,因?yàn)槲铱梢郧宄乜吹矫總€(gè) OrderLine 對(duì)象的 orderLineId 設(shè)置正確。我究竟做錯(cuò)了什么?
查看完整描述

1 回答

?
藍(lán)山帝景

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊

如果您想將 order_id 和 order_line_id 作為 OrderLine 實(shí)體中的復(fù)合鍵,則需要?jiǎng)?chuàng)建@Embeddable第一個(gè):


 @Embeddable

 public class OrderLinePK implements Serializable {

      private Integer orderId;

      private Integer orderLineId;

 } 

并在您的 OrderLine 實(shí)體中將其更改為


 @EmbeddedId

 private OrderLinePk pk;


 @MapsId("orderId")

 @ManyToOne

 private Order order;

現(xiàn)在每次您需要?jiǎng)?chuàng)建一個(gè)新的 OrderLine 時(shí),您都必須創(chuàng)建一個(gè)主鍵對(duì)象并像這樣分配 ID


 OrderLine orderLine = new OrderLine();

 OrderLinePK pk = new OrderLinePK();

 pk.setOrderLineId(11);

 orderLine.setPk(pk);

 orderLine.setOrder(order);

希望這可以幫助。


查看完整回答
反對(duì) 回復(fù) 2022-05-12
  • 1 回答
  • 0 關(guān)注
  • 115 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)