Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring jpa具有额外列的多对多:列id不能为null_Spring_Jpa - Fatal编程技术网

Spring jpa具有额外列的多对多:列id不能为null

Spring jpa具有额外列的多对多:列id不能为null,spring,jpa,Spring,Jpa,我试图保存一个具有多对多关系的实体,但收到一个错误 项目: import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.pe

我试图保存一个具有多对多关系的实体,但收到一个错误

项目:

import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id ;
private String name ;
private String brand ;
private String category ;
private Double unitPrice ;
private Double weight ;
private String manufacturer ;
private String description ;

@OneToMany(mappedBy = "item", cascade = CascadeType.ALL, orphanRemoval = true)

private Set<ItemInventory> itemInventories;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getBrand() {
    return brand;
}

public void setBrand(String brand) {
    this.brand = brand;
}

public String getCategory() {
    return category;
}

public void setCategory(String category) {
    this.category = category;
}

public Double getUnitPrice() {
    return unitPrice;
}

public void setUnitPrice(Double unitPrice) {
    this.unitPrice = unitPrice;
}

public Double getWeight() {
    return weight;
}

public void setWeight(Double weight) {
    this.weight = weight;
}

public String getManufacturer() {
    return manufacturer;
}

public void setManufacturer(String manufacturer) {
    this.manufacturer = manufacturer;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}


public Item() {
    super();
    // TODO Auto-generated constructor stub
}

public Set<ItemInventory> getItemInventories() {
    return itemInventories;
}

public void setItemInventories(Set<ItemInventory> itemInventories) {
    this.itemInventories = itemInventories;
}

public Item(Integer id, String name, String brand, String category, Double unitPrice, Double weight,
        String manufacturer, String description, Set<ItemInventory> itemInventories) {
    super();
    this.id = id;
    this.name = name;
    this.brand = brand;
    this.category = category;
    this.unitPrice = unitPrice;
    this.weight = weight;
    this.manufacturer = manufacturer;
    this.description = description;
    this.itemInventories = itemInventories;
}

@Override
public String toString() {
    return "Item [id=" + id + "]";
}
}
堆栈跟踪:

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列“item_id”在处不能为空 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) ~(na:1.8.0_112)at sun.reflect.NativeConstructorAccessorImpl.newInstance(未知源) ~(na:1.8.0_112)at sun.reflect.delegatingConstructor AccessorImpl.newInstance(未知 源)~[na:1.8.0_112]at java.lang.reflect.Constructor.newInstance(未知源) ~(na:1.8.0_112)at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2494) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104) ~[mysql-connector-java-5.1.43.jar:5.1.43]at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998) ~[mysql-connector-java-5.1.43.jar:5.1.43]at sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) ~(na:1.8.0_112)at sun.reflect.NativeMethodAccessorImpl.invoke(未知源) ~(na:1.8.0_112)at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知源) ~[na:1.8.0_112]位于java.lang.reflect.Method.invoke(未知源代码) ~(na:1.8.0_112)at org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114) ~[tomcat-jdbc-8.5.16.jar:na]at com.sun.proxy.$Proxy104.executeUpdate(未知源)~[na:na]位于 org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:204) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.jdbc.batch.internal.NonBatchingBatch.addToBatch(NonBatchingBatch.java:45) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2949) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3449) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.action.internal.EntityInsertAction.execute(EntityInsertAction.java:89) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:582) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:456) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:337) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:39) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1282) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:465) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at TransactionCompletion之前的org.hibernate.internal.SessionImpl.flushBeforeTransactionCompletion(SessionImpl.java:2963) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.internal.SessionImpl.beforeTransactionCompletion(SessionImpl.java:2339) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.jdbc.internal.jdbcoordinatorimpl.beforeTransactionCompletion(jdbcoordinatorimpl.java:485) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.resource.transaction.backend.jdbc.internal.jdbResourceLocalTransactionCoordinatorImpl.beforeCompletionCallback(jdbResourceLocalTransactionCoordinatorImpl.java:147) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.resource.transaction.backend.jdbc.internal.JdbcResourceLocalTransactionCoordinatorImpl.access$100(JdbcResourceLocalTransactionCoordinatorImpl.java:38) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.resource.transaction.backend.jdbc.internal.jdbResourceLocalTransactionCoordinatorImpl$TransactionDriverControlImpl.commit(jdbResourceLocalTransactionCoordinatorImpl.java:231) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.engine.transaction.internal.TransactionImpl.commit(TransactionImpl.java:65) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:61) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final]at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:517) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE]位于 org.springframew
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

@Entity
public class Inventory {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String address ;
private String phone ;
@Override
public String toString() {
    return "Inventory [id=" + id + "]";
}



private String gps_coordinates ;


@ManyToOne
@JoinColumn(name = "company_id")
private Company company ;


@OneToMany(mappedBy = "inventory", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<ItemInventory> itemInventories;



public Integer getId() {
    return id;
}



public void setId(Integer id) {
    this.id = id;
}



public String getAddress() {
    return address;
}



public void setAddress(String address) {
    this.address = address;
}



public String getPhone() {
    return phone;
}



public void setPhone(String phone) {
    this.phone = phone;
}



public String getGps_coordinates() {
    return gps_coordinates;
}



public void setGps_coordinates(String gps_coordinates) {
    this.gps_coordinates = gps_coordinates;
}











public Set<ItemInventory> getItemInventories() {
    return itemInventories;
}



public void setItemInventories(Set<ItemInventory> itemInventories) {
    this.itemInventories = itemInventories;
}








public Company getCompany() {
    return company;
}



public void setCompany(Company company) {
    this.company = company;
}









public Inventory(Integer id, String address, String phone, String gps_coordinates, Company company,
        Set<ItemInventory> itemInventories) {
    super();
    this.id = id;
    this.address = address;
    this.phone = phone;
    this.gps_coordinates = gps_coordinates;
    this.company = company;
    this.itemInventories = itemInventories;
}



public Inventory() {
    super();
    // TODO Auto-generated constructor stub
}






}
import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

@Entity
@Table(name = "item_inventory")

public class ItemInventory implements Serializable {

@Id
@ManyToOne
@JoinColumn(name = "item_id")
private Item item ;
@Id
@ManyToOne
@JoinColumn(name = "inventory_id")

private Inventory inventory ;


private Long quantity ;



public Item getItem() {
    return item;
}
public void setItem(Item item) {
    this.item = item;
}


public Inventory getInventory() {
    return inventory;
}
public void setInventory(Inventory inventory) {
    this.inventory = inventory;
}

@Column(name = "quantity")
public Long getQuantity() {
    return quantity;
}
public void setQuantity(Long quantity) {
    this.quantity = quantity;
}
public ItemInventory(Item item, Inventory inventory, Long quantity) {
    super();
    this.item = item;
    this.inventory = inventory;
    this.quantity = quantity;
}
public ItemInventory() {
    super();
    // TODO Auto-generated constructor stub
}
@Override
public String toString() {
    return "ItemInventory [item=" + item + ", inventory=" + inventory + ", quantity=" + quantity + "]";
}




}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.inconso.models.Inventory;
import com.inconso.models.Item;
import com.inconso.models.ItemInventory;
import com.inconso.repositories.InventoryRepository;
import com.inconso.repositories.ItemRepository;

@RestController
public class ItemController {
    @Autowired
    private ItemRepository itemRepos ;
    @Autowired
    private InventoryRepository inventoryRepos ;
    @RequestMapping(value = "itemInventory/add/{company}", method = RequestMethod.POST)

        public Object addItem(@RequestBody ItemInventory itemInventory)  {

        Item item = itemRepos.findOne(itemInventory.getItem().getId()) ;
        // still add stuff here in case item not found
        Inventory inventory = inventoryRepos.findOne(itemInventory.getInventory().getId()) ;
        // still add stuff here if inventory not found

        itemInventory.setInventory(inventory);
        itemInventory.setItem(item);


        item.getItemInventories().add(itemInventory) ;
        inventory.getItemInventories().add(itemInventory) ;
        System.out.println("-------"+itemInventory.getItem()+"---------");

        itemRepos.save(item) ;







        return "Item added" ;
      }





}
item.getItemInventories().add(itemInventory) ;