Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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
Java @OneToMany双向连接列正在插入;空";值(休眠)_Java_Hibernate_Jpa_Hibernate Onetomany - Fatal编程技术网

Java @OneToMany双向连接列正在插入;空";值(休眠)

Java @OneToMany双向连接列正在插入;空";值(休眠),java,hibernate,jpa,hibernate-onetomany,Java,Hibernate,Jpa,Hibernate Onetomany,我有两个模型/注释类ProductDetails和VnfDetails。 我想使用JPA HIbernate连接具有@OnetoMany关系的两个表 ProductDetails模型类如下所示,带有@OnetoMany映射: @Entity @Table(name="product_details") public class ProductDetails { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(nam

我有两个模型/注释类ProductDetails和VnfDetails。 我想使用JPA HIbernate连接具有@OnetoMany关系的两个表

ProductDetails模型类如下所示,带有@OnetoMany映射:

@Entity
@Table(name="product_details")
public class ProductDetails {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="ID")
private int id;        

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

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

@OneToMany(mappedBy="productDetails", cascade=CascadeType.ALL)
private Set<VnfDetails> vnfd;


public Set<VnfDetails> getVnfd() {
    return vnfd;
}

public void setVnfd(Set<VnfDetails> vnfd) {
    this.vnfd = vnfd;
}

public int getId() {
    return id;
}

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

public String getProductId() {
    return productId;
}

public void setProductId(String productId) {
    this.productId = productId;
}

public String getProductName() {
    return productName;
}

public void setProductName(String productName) {
    this.productName = productName;
}
当我插入数据时,数据被插入,但 VnfDetails表中的产品ID为空

它应该是具有PRODUCT_DETAILS表的“ID”的外键


无法解决此问题。

由于这是一个双向关系,您需要确保插入的每个实体都引用了关系的另一端,因为您将vndf级联到产品详细信息中,所以您应该执行以下操作

productDetails.setVndf(vndfList);//vndfList is having one item for example
vndfList.get(0).setProductDetails(productDetails);
productDetailsDao.save(productDetails);

PRODUCT_ID不是ProductDetails实体中的PK,这就是映射不起作用的原因。尝试将其更改为ID列,它应该可以正常工作。

在单向映射中,我遇到了类似的问题,即它在外键列中插入空值,并获得运行时异常datavoilation异常

通过在
@JoinColumn
上添加nullable=false,问题得到了解决

@OnetoMany
@JoinColumn(nullable=false) 

并删除了子实体中的外键列定义。

在onetoManyClass中定义joinColumn,而不在ProductDetails中进行任何引用

@OneToMany 
@JoinColumn(name="qid") 
private Set<VnfDetails> vnfd;
@OneToMany
@JoinColumn(name=“qid”)
私有集vnfd;

我正在从我的bean类中提取并将其设置为model类,如下所示
VnfDetails v=new VnfDetails();ProductDetails p=新的ProductDetails();Set vnfList=new HashSet();v.setVnfId(product.getVnfId());v.setVnfName(product.getVnfName());vnfList.add(v);p.setProductId(product.getProductId());p.setProductName(product.getProductName());p.setVnfd(vnfList);this.productDAO.addProduct(p);
是的,您缺少在vndf中设置productdetails的部分,因此需要在productdetails p=new productdetails()之后添加;v、 setProductDetails(p);不,这是不正确的,联接列的名称可以是任何不是解决方案的内容。您不应该为此更改DB架构。必须有另一种解决办法。
@OnetoMany
@JoinColumn(nullable=false) 
@OneToMany 
@JoinColumn(name="qid") 
private Set<VnfDetails> vnfd;