当前位置: 首页 > 知识库问答 >
问题:

@OneToMany双向连接列正在插入“null”值(Hibernate)

澹台庆
2023-03-14

我有2个模型/注释类,产品细节和Vnf细节。我想使用JPA HIbernate将2个表与@Oneto很多关系连接起来

产品细节模型类在下面的@Oneto许多映射中:

@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;
}

VNF详细信息如下所示,其中有@ManytoOne和JoinColumn:

@Entity
@Table(name="vnf_details")
public class VnfDetails {


@Id
@Column(name="VNF_ID")
private String vnfId;

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

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="PRODUCT_ID")
private ProductDetails productDetails;

public ProductDetails getProductDetails() {
    return productDetails;
}

public void setProductDetails(ProductDetails productDetails) {
    this.productDetails = productDetails;
}

public String getVnfId() {
    return vnfId;
}

public void setVnfId(String vnfId) {
    this.vnfId = vnfId;
}

public String getVnfName() {
    return vnfName;
}

public void setVnfName(String vnfName) {
    this.vnfName = vnfName;
}

当我插入数据时,数据被插入,但VnfDetails表中的产品ID为空。

它应该是具有"ID"的外键PRODUCT_DETAILS表。

无法解决此问题。

共有3个答案

李昊苍
2023-03-14

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

@OneToMany 
@JoinColumn(name="qid") 
private Set<VnfDetails> vnfd;
穆丁雨
2023-03-14

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

productDetails.setVndf(vndfList);//vndfList is having one item for example
vndfList.get(0).setProductDetails(productDetails);
productDetailsDao.save(productDetails);
刁璞
2023-03-14

在单向映射中,我也遇到过类似的问题,在外键列中插入空值,并得到了运行时异常数据避免异常。

问题通过添加nullable=false在@加入列上得到修复

@OnetoMany
@JoinColumn(nullable=false) 

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

 类似资料:
  • 我正在寻找如何删除关系的寄存器一对多/多对一。问题是当我执行EntityManager.remove()时,所有记录都被删除,我希望删除唯一的孩子(DiasTurma)而不是您的父级(Turma)。 我是这样尝试的 方法

  • Hy, 我为数据库创建了以下3个表: ); 我有以下存储过程 C#代码: 但在我将数据插入使用上述代码的表单后,我得到了以下错误: 无法将值NULL插入列User_Id...... PLATFORM. MDF. dbo. Buyer;列不允许空值。INSERT失败。 无法将值NULL插入列Type_Id,表... PLATFORM. MDF. dbo. User;列不允许空值。INSERT失败。

  • 我正在尝试为一个项目创建一个双链接列表容器。我不能使用任何std容器。必须对双链接列表进行排序。以下是我目前的代码: 我遇到的问题是在我的插入函数中。我正在使用调试器,并在以下行插入代码:list.insert(10);。 它正确地进入第一种情况,即head==nullptr并创建节点。当我进入下一行代码(list.insert(20))时,它会用这一行创建一个节点:node*node=newno

  • 问题内容: 我有一个sql列,它是可为空的,并且对表有约束 另外,由于它可以为空,所以我想设置并获取表中的空值 但我不能这样做,并且为null。如何使用JDBC将null设置为null 问题答案: 尝试使用。 接口PreparedStatement.setNull API 将java.sql.Types映射为SQL类型 PS:编辑以反映Java 8更新。

  • 我有一个使用存储过程填充的表。这个存储过程使用从另一个数据库调用属性的视图。 举例来说,它类似于: 视图的定义如下: 并正确插入值,但如果以这种方式使用视图: 显示此消息: 正在检查身份信息:当前身份值“1252” DBCC执行已完成。如果DBCC打印了错误消息,请与系统管理员联系。 Msg 515,第16级,状态2,过程TSP,第16行 无法将值NULL插入表db2的“金额”列中。dbo。表';