Java 添加JPA非主键引用的多通实体

Java 添加JPA非主键引用的多通实体,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,现在,为了创建DemandItem,我应该首先使用skuCode加载库存,然后使用setInventory设置库存。只是调用setSkuCode函数,导致暂时的实体异常。如何解决, 我只需要在创建数据时填充SKU代码,但在创建此实体时不需要加载它 提取时,我需要加载库存实体 @默认情况下,manytone的fetch是急切的,因此在提取DemandItem时,将加载库存。设置库存应该在持久化上下文中,它不应该是新的,因为您的Orm将无法在db上识别它。在持久化时,您必须在持久化DemandIte

现在,为了创建DemandItem,我应该首先使用skuCode加载库存,然后使用setInventory设置库存。只是调用setSkuCode函数,导致暂时的实体异常。如何解决,

  • 我只需要在创建数据时填充SKU代码,但在创建此实体时不需要加载它
  • 提取时,我需要加载库存实体

  • @默认情况下,manytone的fetch是急切的,因此在提取DemandItem时,将加载库存。设置库存应该在持久化上下文中,它不应该是新的,因为您的Orm将无法在db上识别它。在持久化时,您必须在持久化
    DemandItem
    之前在
    DemandItem
    上设置关联的
    库存。您可以在一行代码中获取库存。我不确定您想要解决的问题到底是什么。为什么每次保存DemandItem记录时都要加载DB数据?…我只是在DemandItem记录中只存储sku代码…我只需要在提取DemandItem时获取库存..对我来说,读取较少,并且DemandItem的wirte频繁…没有加载的用途每次写入时都会显示库存DemandItem@ManyToOne默认情况下,
    eager
    ,因此在提取DemandItem时将加载库存。设置库存应该在持久化上下文中,它不应该是新的,因为您的Orm将无法在db上识别它。在持久化时,您必须在持久化
    DemandItem
    之前在
    DemandItem
    上设置关联的
    库存。您可以在一行代码中获取库存。我不确定您想要解决的问题到底是什么。为什么每次保存DemandItem记录时都要加载DB数据?…我只是在DemandItem记录中只存储sku代码…我只需要在提取DemandItem时获取库存..对我来说,读取较少,并且DemandItem的wirte频繁…没有加载的用途每次写入DemandItem时,库存始终保持不变
    
    public class DemandItem extends BaseEntity{
        @ManyToOne(cascade = {})
        @JoinColumn(name = "sku_code",referencedColumnName = "sku_code", nullable = false)
        private Inventory inventory;
    
        public Inventory getInventory() {
            return inventory;
        }
    
        public void setInventory(Inventory inventory) {
            this.inventory = inventory;
        }
    
        public void setSkuCode(String skuCode){
            if(this.inventory == null){
                this.setInventory(new Inventory(skuCode));
            }
        }
    
        public String getSkuCode(){
            if(this.inventory != null){
                return this.inventory.getSkuCode();
            }
    
            return null;
        }
    
    }