我已经 Build 了下面的 Companyproduct 实体之间的OneToMany关系 . 当我尝试保存 company 实例时,会抛出错误 column company cannot be null . company 列有一个约束,它可以't be null. But why it' null吗?我错过了什么?

Product.java

@Entity
@Table(name="product")
public class Product {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;

@Column(name="name")
private String name;

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

public Company getCompany() {
    return company;
}

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

public int getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

Company.java

@Entity
@Table(name="manufacturer")
public class Company {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;

@Column(name="name")
private String name;

@OneToMany(cascade=CascadeType.ALL, mappedBy="company")
private List<Product> products;

public List<Product> getProducts() {
    return products;
}

public void setProducts(List<Product> products) {
    this.products = products;
}

public int getId() {
    return id;
}

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

public String getName() {
    return name;
}

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

OnlineStore.java

session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        Product shoes = new Product();
        shoes.setName("Shoes");
        Product tshirt = new Product();
        tshirt.setName("T-shirt");
        Product gloves = new Product();
        gloves.setName("Gloves");
        List<Product> products = new ArrayList<>();
        products.add(shoes);
        products.add(tshirt);
        products.add(gloves);
        Company addidas = new Company();
        addidas.setName("Adiddas");
        addidas.setProducts(products);
        session.save(addidas);
        tx.commit();

错误:列'company'不能为null线程“main”中的异常org.hibernate.exception.ConstraintViolationException:无法在org处的org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:59)执行语句 . 位于org.hibernate.engine.jdbc.spi.SqlExceptionHelper的org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)中的hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) . 转换(SqlExceptionHelper.java:97)在org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:207)在org.hibernate.dialect.identity.GetGeneratedKeysDelegate.executeAndExtract(GetGeneratedKeysDelegate.java:57)在组织位于org.hibernate.persister.entity.Abstract的org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2840)中的.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:42) EntityPersister.insert(AbstractEntityPersister.java:3411)在org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)在org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:619)在组织.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:273)在org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:254)在org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue的.java:299)在org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:318)在org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:275)在org.hibernate.event . internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182)在org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:113)在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGenera tedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:97)在org.hibernate作为.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)org.hibernate.internal.SessionImpl.fireSaveOrUpdate(SessionImpl.java:644)org.hibernate.internal.SessionImpl.saveOrUpdate(SessionImpl.java:636)at at在org.hibernate.engine.internal.Cascade.cascadeAssociation的org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:391)org.hibernate.engine.spi.CascadingActions $ 5.cascade(CascadingActions.java:219) (cascade.java:316)位于org.hibernate的org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155)的org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:424) . 发动机.internal.Cascade.cascadeCollection(Cascade.java:356)org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:319)org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:155) )org.hibernate.engine.Internal.Cascade.cascade(Cascade.java:104)org.hibernate.event.internal.AbstractSaveEventListener.cascadeAfterSave(AbstractSaveEventListener.java:445)org.hibernate.event.internal.AbstractSaveEventListener . 在org.hibernate的org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182)org.hibernate的org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:113)的performSaveOrReplicate(AbstractSaveEventListener.java:281) .event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)在org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)在org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)在org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate( DefaultSaveOrUpdateEventListener.java:73)org.hibernate.internal.SmplionImpl.Fn上的org.hibernate.internal.SmplionImpl.fireSave(SessionImpl.java:675)org.hibernate.internal.SessionImpl.save上的org.hibernate.internal.SessionImpl.save(SessionImpl.java:667) (SessionImpl.java:662)at com.onetomany.model.OnlineStore.main(OnlineStore.java:48)引起:com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:在sun.reflect中,'company'列不能为null位于sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)的sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源)的.NativeConstructorAccessorImpl.newInstance0(本地方法),位于java.lang.reflect.Constructor.newInstan CE(未知源)在com.mysql.jdbc.Util.handleNewInstance(Util.java:425)在com.mysql.jdbc.Util.getInstance(Util.java:408)在com.mysql.jdbc.SQLError.createSQLException( SQLError.java:935)com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3970)com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3906)at com.mysql.jdbc.MysqlIO.sendCommand (MysqlIO.java:2524)在com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2677)在com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2549)在com.mysql.jdbc.PreparedStatement . 在Com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2073)的com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2009)com.mysql.jdbc.PreparedStatement上的executeInternal(PreparedStatement.java:1861)位于org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetRet)的com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1994)中的.executeLargeUpdate(PreparedStatement.java:5098) urnImpl.java:204)......还有41个