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

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

第二次觸發(fā)更新時(shí)延遲初始化 OnetoOne 映射

第二次觸發(fā)更新時(shí)延遲初始化 OnetoOne 映射

侃侃無極 2022-10-20 17:26:27
我試圖理解為什么當(dāng)我第二次點(diǎn)擊控制器時(shí),我的 OnetoOne 映射正在初始化。下面是我的代碼:控制器:@RequestMapping(value="/updateOrderbyOrderid", method=RequestMethod.PUT,produces=MediaType.APPLICATION_JSON_VALUE)public Order updateOrderbyOrderid (@RequestBody Order orderVO ) {System.out.println(orderVO.getOrderId());Order s1 = orderRepository.findByOrderId(orderVO.getOrderId());if (orderVO.getCustomerId()!=null) {    orderVO.setCustomer(customerRepository.findByCustomerId(orderVO.getCustomerId()));}s1 = orderRepository.saveAndFlush(orderVO);return s1;}訂單實(shí)體:@Entity@Table(name="Ordertable", schema="cf_2583f365_c3c6_499a_a60d_138e7e7023eb")public class Order {@Id@Column(name = "ORDER_ID")@GeneratedValue(strategy=GenerationType.IDENTITY)private int orderId;@OneToOne(fetch=FetchType.LAZY,cascade=CascadeType.ALL)@JoinColumn(name = "ORDER_CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID")private Customer customer;private transient Long customerId;public int getOrderId() {    return orderId;}public void setOrderId(int orderId) {    this.orderId = orderId;}public Customer getCustomer() {    return customer;}public void setCustomer(Customer customer) {    this.customer = customer;}public Long getCustomerId() {    return customerId;}public void setCustomerId(Long customerId) {    this.customerId = customerId;}}客戶實(shí)體:@Entity@Table(name="Customer", schema="cf_2583f365_c3c6_499a_a60d_138e7e7023eb")public class Customer {@Id@Column(name = "CUSTOMER_ID")@GeneratedValue(strategy=GenerationType.IDENTITY)private Long customerId;@Column(name = "CUSTOMER_NAME")private String customer_name;@Column(name = "CUSTOMER_address_id")private int customer_address_id;public Long getCustomerId() {    return customerId;}public void setCustomerId(Long customerId) {    this.customerId = customerId;}public String getCustomer_name() {    return customer_name;}public void setCustomer_name(String customer_name) {    this.customer_name = customer_name;}public int getCustomer_address_id() {    return customer_address_id;}
查看完整描述

3 回答

?
catspeake

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

Spring Data JPAfindBy()方法由EntityManager.find()EntityManager.find()首先檢查緩存中的數(shù)據(jù),如果在緩存中沒有找到數(shù)據(jù),則點(diǎn)擊數(shù)據(jù)庫加載數(shù)據(jù)并放入緩存以使其管理。

如果我們再次這樣做EntityManager.find()(再次針對(duì)相同的主鍵),它會(huì)再次檢查緩存。現(xiàn)在這一次數(shù)據(jù)是從緩存中加載而不是命中數(shù)據(jù)庫。

我認(rèn)為 Hibernate 正在緩存對(duì)象,當(dāng)我第二次點(diǎn)擊它時(shí),它會(huì)返回緩存項(xiàng)的代理對(duì)象。

以下是我已閱讀以了解findBy()工作的鏈接。

使用 getOne 和 findOne 方法時(shí) Spring Data JPA

類似的負(fù)載并在彈簧數(shù)據(jù)上獲取休眠方法

EntityManager.find() 和 EntityManger.getReference() 有什么區(qū)別?

現(xiàn)在為了測試我是否正確,我em.detach()在下面的代碼中使用了。detach()將使托管實(shí)體 --> 非托管,并將其從緩存中刪除。現(xiàn)在,當(dāng)我執(zhí)行代碼時(shí),我得到了新初始化的 bean。

@RequestMapping(value="/updateOrderbyOrderid", method=RequestMethod.PUT,produces=MediaType.APPLICATION_JSON_VALUE)

public Order updateOrderbyOrderid (@Valid @RequestBody Order orderVO ) {

    

    System.out.println(orderVO.getOrderId());

    Order s1 = orderRepository.findByOrderId(orderVO.getOrderId());

    em.detach(s1.getCustomer());

    s1= null;

    if (orderVO.getCustomerId()!=null) { 

        Customer findByCustomerId = customerRepository.findByCustomerId(orderVO.getCustomerId());

        orderVO.setCustomer(customerRepository.findByCustomerId(orderVO.getCustomerId()));

    }


    s1 = orderRepository.saveAndFlush(orderVO);

    

    return s1;

}


查看完整回答
反對(duì) 回復(fù) 2022-10-20
?
慕慕森

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

您的映射看起來很像多對(duì)多。試試這個(gè):


// OrderTable

@OneToOne(fetch = FetchType.LAZY, optional = false)

@JoinColumn(name = "CUSTOMER_ID", nullable = false)

private Customer customer;

// constructors

public OrderTable() {}

public OrderTable(Customer customer) { this.customer = customer; }



// Customer

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "customer")

private OrderTable orderTable;


查看完整回答
反對(duì) 回復(fù) 2022-10-20
?
慕哥9229398

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

我認(rèn)為您必須使用fetch=FetchType.EAGER進(jìn)行 OneToOne 映射


@OneToOne(fetch=FetchType.EAGER,cascade=CascadeType.ALL)

@JoinColumn(name = "ORDER_CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID")

private Customer customer;

希望它會(huì)有所幫助。


查看完整回答
反對(duì) 回復(fù) 2022-10-20
  • 3 回答
  • 0 關(guān)注
  • 143 瀏覽

添加回答

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