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

添加新的关联JPA实体将尝试插入具有空id的行

公羊灿
2023-03-14

我有2个类似于以下内容的JPA实体:

@Entity
class Customer {
   @Id
   @GeneratedValue
   Long id

   @OneToOne(cascade = CascadeType.ALL)
   @PrimaryKeyJoinColumn
   CustomerInformation customerInformation
}


@Entity
class CustomerInformation {
   @Id
   @OneToOne
   @JoinColumn(name = "id")
   Customer customer

   String firstName
   String lastName
}

我正在使用spring-data-jpa生成我的DAO层。虽然不是很有趣,但它是这样的:

public interface CustomerRepository extends CrudRepository<Customer, Long> {
}
@Transactional
public void createNewCustomer() {
   Customer cust = new Customer();
   CustomerInformation custInf = new CustomerInformation;
   custInf.setCustomer(cust);
   custInf.setFirstName("asdf");
   custInf.setLastName("hjkl");

   cust.setCustomerInformation(custInf);

   customerRepository.save(cust);
}
@Transactional
public void updateExistingCustomer(Long userId) {

   Customer foundCustomer = customerRepository.findOne(userId);

   if (foundCustomer.getCustomerInformation() == null) {
      CustomerInformation custInf = new CustomerInformation();
      custInf.setCustomer(foundCustomer);
      custInf.setFirstName("asdf");
      custInf.setLastName("hjkl");

      cust.setCustomerInformation(custInf);

      customerRepository.save(foundCustomer);
   }
}
Hibernate: insert into CustomerInformation (firstName, lastName, id) values (?, ?, ?)
Feb 1, 2013 7:40:12 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
WARN: SQL Error: 20000, SQLState: 23502
Feb 1, 2013 7:40:12 PM org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
ERROR: Column 'ID'  cannot accept a NULL value.

共有1个答案

令狐宏伟
2023-03-14

您还应该将id字段标记为生成的值,因此hibernate将为其提供一些值:

@Entity
class Customer {
   @Id
   @GeneratedValue // !!!
   Long id

...

@Entity
class CustomerInformation {
   @Id
   @GeneratedValue // !!!
   @OneToOne
   @JoinColumn(name = "id")
   Customer customer

...
 类似资料:
  • 假设我在前面有一个表单,它有常用的字段和下拉列表。在这些下拉列表中,用户可以选择一个选项,并且每个选项都链接到Spring data JPA中的一个实体; 下拉列表包含一些标签和对应实体的链接作为值。然后,这个值在POST-request中传递给我们希望创建的实体的PagingAndSorting存储库。 假设它是一个具有username的用户,并且他必须与其中一个办公室(也是一个实体)关联: 我

  • “对于实体,Id属性不能为null,因此需要将该类映射为ValueObject。如果是这样,Id属性将被视为常规属性,而不转到该对象的GlobalId。” 我的问题是: 如果Id为NULL,为什么不能将实体视为新的? null

  • 问题内容: 我有一个具有以下结构的数据库: 当我尝试创建EntityProperty类时 我得到以下异常: 我知道JPA实体必须具有主键,但是由于无法控制的原因,我无法更改数据库架构。是否可以创建将与这样的数据库模式一起工作的JPA(hibernate)实体? 问题答案: 我猜您有一个组合键,其中的外键是。如果是这样,则可以按如下所示进行映射:

  • 我有一个实体 我有这个错误

  • 主要内容:JPA实体插入示例在JPA中,我们可以通过实体轻松地将数据插入到数据库中。 提供方法来插入数据记录。 JPA实体插入示例 在这里,我们将演示如何使用实现插入学生的记录。 创建一个JPA项目,其项目目录结构如下所示 - 这个例子包含以下步骤 - 第1步: 在包下创建一个名为StudentEntity.java的实体类,这个类包含以下几个属性:, 和 。 文件:StudentEntity.java 的代码如下 - 第2

  • 这是我的pb。 我有一个实体游戏和一个实体控制台 这是一个多个关联。 为了提高性能,我在同一查询中加载游戏和控制台,如下所示: 当我使用