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

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

JPA 錯(cuò)誤:InvalidDataAccessApiUsageException:

JPA 錯(cuò)誤:InvalidDataAccessApiUsageException:

小唯快跑啊 2022-05-25 16:42:37
我有兩個(gè)實(shí)體使用oneToMany注釋相互映射。一個(gè)實(shí)體是bookedBus,第二個(gè)是drivers驅(qū)動(dòng)程序?qū)嶓w已經(jīng)插入了一行,該行稍后將成為bookedBus 實(shí)體(PK) 的外部引用(FK)。下面是兩個(gè)實(shí)體,為簡(jiǎn)潔起見,setter 和 getter 已被跳過。第一個(gè)實(shí)體@Entity@Table(name = "bookedBuses")public class BookedBuses implements Serializable {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)    @JoinColumn(name = "driver_id")    private Drivers driver;}第二實(shí)體@Entitypublic class Drivers implements Serializable {    @Id    @GeneratedValue(strategy = GenerationType.IDENTITY)    private Long id;    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "driver")    private List<BookedBuses> bookedBus;}現(xiàn)在,當(dāng)我嘗試保存到預(yù)訂的巴士實(shí)體時(shí),它會(huì)引發(fā)以下異常org.springframework.dao.InvalidDataAccessApiUsageException:分離的實(shí)體傳遞給堅(jiān)持:com.bus.api.entity.Drivers;嵌套異常是 org.hibernate.PersistentObjectException:分離的實(shí)體傳遞給堅(jiān)持:com.bus.api.entity.Drivers以下是我嘗試保存到bookedBus 實(shí)體的方法BookedBuses bookedRecord = new BookedBuses();bookedRecord.setBookedSeats(1);bookedRecord.setBookedBusState(BookedBusState.LOADING);      bookedRecord.setBus(busService.getBusByPlateNumber(booking.getPlateNumber()));bookedRecord.setRoute(booking.getRoute()); infoLogger.info("GETTING DRIVER ID ======= " +    booking.getDriver().getId()); Drivers drivers = new Drivers(booking.getDriver().getId()); List<BookedBuses> d_bu = new ArrayList<>(); drivers.setBooked(d_bu); drivers.addBooked(bookedRecord); bookedRecord.setDriver(drivers); bookedBusService.save(bookedRecord);My BookBusService 按要求保存方法@Autowiredprivate BookedBusRepository bookedBusRepo;public boolean save(BookedBuses bookedRecord) {    try {        bookedBusRepo.save(bookedRecord);        return true;    } catch (DataIntegrityViolationException ex) {        System.out.println(ex);        AppConfig.LOGGER.error(ex);        return false;        // Log error message    }}
查看完整描述

2 回答

?
慕桂英546537

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

第一個(gè)你在命名上有一些混淆:你有DriverDrivers。像這樣:

private Drivers driver;

還選擇這樣的變量名稱:

BookedBuses bookedRecord = new BookedBuses();

會(huì)造成很多混亂。不要在類型之間混合復(fù)數(shù)和單數(shù),最好不要引入可能不容易關(guān)聯(lián)的名稱,如記錄。還有這個(gè):

private List<BookedBuses> bookedBus;

應(yīng)該是這樣的:

private List<BookedBus> bookedBuses;

(并且還需要更改您的班級(jí)名稱 BookedBus -> BookedBus)

無論如何,實(shí)際問題似乎在這里:

Drivers drivers = new Drivers(booking.getDriver().getId());

您需要在存儲(chǔ)庫的幫助下按 id 獲取現(xiàn)有實(shí)體,而不是使用現(xiàn)有的 id 創(chuàng)建一個(gè)新實(shí)體。所以像:

Drivers drivers = driverRepo.findOne(booking.getDriver().getId()); // or findById(..)

似乎您有一個(gè)構(gòu)造函數(shù)(您沒有顯示),可以創(chuàng)建具有 id 的驅(qū)動(dòng)程序。沒有管理它被認(rèn)為是分離的。(你也有drivers.addBooked(bookedRecord);你沒有分享的,但也許是微不足道的)

另請(qǐng)注意,一些帖子建議根據(jù)您的需要更改CascadeType.ALL是否CascadeType.MERGE有效。Spring 數(shù)據(jù)能夠save(..)基于實(shí)體 id 進(jìn)行一些合并,但在這種情況下不一定。


查看完整回答
反對(duì) 回復(fù) 2022-05-25
?
幕布斯7119047

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

這條線


Drivers drivers = new Drivers(booking.getDriver().getId());


如果您已經(jīng)擁有可用的驅(qū)動(dòng)程序 ID,則無需再次從數(shù)據(jù)庫中提取驅(qū)動(dòng)程序 ID。


從&中刪除Cascade屬性后,您的代碼應(yīng)該可以工作。@OneToMany@ManyToOne


@Entity

@Table(name = "bookedBuses")

public class BookedBuses implements Serializable {


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;

`

    @ManyToOne(fetch = FetchType.LAZY)

    @JoinColumn(name = "driver_id")

    private Drivers driver;

}


@Entity

public class Drivers implements Serializable {


    @Id

    @GeneratedValue(strategy = GenerationType.IDENTITY)

    private Long id;


    @OneToMany(fetch = FetchType.LAZY)

    @JoinColumn(name = "driver_id")

    private List<BookedBuses> bookedBus;

}


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

添加回答

舉報(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)