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

保存新记录时的OneToOne CONSTRAINTVIOLION,PK提供

瞿健
2023-03-14

我们有一个名为顾客的实体,它与实体地址有OneToOne关系。

客户的主键应手动定义。应自动定义地址”主键。

因此,在Customer中,我省略了@GeneratedValue并手动提供is值。但是,在尝试保存时,我遇到以下错误:

2018-11-07 10:42:17.810 ERROR 1257 --- [nio-8080-exec-2] o.h.i.ExceptionMapperStandardImpl        : HHH000346: Error during managed flush [Validation failed for classes [br.com.customers.entity.Address] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
    ConstraintViolationImpl{interpolatedMessage='não pode ser nulo', propertyPath=street, rootBeanClass=class br.com.customers.entity.Address, messageTemplate='{javax.validation.constraints.NotNull.message}'}

问题是正在提供address.street,我不知道为什么JPA抱怨它是空的...

下面是我试图保存的JSON主体。(正在正确反序列化,因为地址不为空)

{
    "customer_Id": 50,
    "name": "name",
    "company_name": "company_name",
    "email": "email@provider.com",
    "business_phone": "(00) 1111-2222",
    "mobile_phone": "(00) 1111-2222",
    "document": "123456789",
    "state_registration_number": "ISENTO",
    "state_registration_type": "NO_CONTRIBUTOR",
    "city_registration_number": "ISENTO",
    "classification": "AUTO",
    "address": {
        "street": "STREET NAME",
        "number": "NUMBER",
        "complement": "COMPLEMENT",
        "zip_code": "ZIP_CODE",
        "neighborhood": "NEIGHBORHOOD",
        "city": "CITY",
        "state": "STATE"
    }
}

以下是客户实体:

@Data
@Entity(name = "X_CUSTOMERS")
public class Customer {

    @Id
    private int customer_Id;

    @NotNull
    private String name;

    private String company_name;

    private String email;

    private String business_phone;

    private String mobile_phone;

    @NotNull
    private String document;

    private String state_registration_number;

    private String state_registration_type;

    private String city_registration_number;

    @NotNull
    private String classification;

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @JoinColumn(name = "address_id")
    private Address address;

}

在此,地址实体:

@Data
@Entity(name = "X_ADDRESS")
public class Address {

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

    @NotNull
    private String street;

    private String number;

    private String complement;

    private String zip_code;

    private String neighborhood;

    private String city;

    private String state;

}

我做错了什么?谢谢

添加代码确实持久化实体:

客户资源库:

public interface CustomerRepository extends JpaRepository<Customer, Integer> {

}

坚持:

@RestController
@RequestMapping("/customers")
public class CustomersController {

    private CustomerRepository customerRepository;

    public CustomersController(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    @PostMapping
    public Customer postCustomer(@RequestBody Customer customer) {
        return customerRepository.save(customer);
    }


}

共有2个答案

梁丘招
2023-03-14

如果您添加级联类型。合并,就行了

@OneToOne(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE})
    @JoinColumn(name = "address_id")
    private Address address;

您设置了客户id(50),以便执行以下行的SimpleParepository。

return this.em.merge(entity); 
红砚文
2023-03-14

通过阅读Hibernate文档,save操作只保存具有自动生成ID的实体。因此,如果您打算自己设置id,那么您需要的是更改persist的insert方法。由于您的客户的id不是自动生成的,所以这可能就是问题所在。你可以在这个博客上读到更多。

@PostMapping
public Customer postCustomer(@RequestBody Customer customer) {
    return customerRepository.persist(customer);
}

希望有帮助。

 类似资料:
  • 我创建了一个表单,其中有四个用于用户输入数据的文本编辑字段和一个用于将数据保存到列表的按钮。 但当我将第二条记录添加到列表中时,第一条记录将自动更新,这是怎么回事。 IDE:VS Code flutter SDK版本:1.12.13+hotfix.8操作系统:windows 10 下面是我的代码: 列表中的所有记录将根据上次输入的数据自动更新,请给予帮助,谢谢。

  • 我有一个由3列组成的用户设置表(或见下图):,,。 然后我有两个函数,一个保存时区,一个保存时间格式。 当我第一次运行函数时(每个函数都是通过ajax调用独立运行的),我得到了正确的结果: 然后,当我尝试更新

  • 问题内容: 我试图将数据库表保存在班级 学生* 的 ListArray 中。 * 在while循环中,当我尝试将数据打印为 它打印完美。但是当我尝试将其打印为 它打印从数据库读取的最后一条记录。记录数相同。如果在数据库表中保存了4行,那么显示的记录也将是4次。 我使用LIST的方式有问题吗?谢谢! 问题答案: 更改为 您是,因为您创建 了。您必须在数据库中添加等于。因此,创建如下。 使用

  • 我试图保存多个记录通过 但是从上面来看,只创建了第一个数组。我哪里做错了?感谢您的帮助。

  • 我的搜索建议我可以使用,但是我对它的测试显示它是按照它所说的顺序执行的,所以它的“find”部分返回更新之前找到的记录。 更新后如何查找记录?

  • 本文向大家介绍js操作cookie保存浏览记录的方法,包括了js操作cookie保存浏览记录的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js操作cookie保存浏览记录的方法。分享给大家供大家参考,具体如下: 说明:最近做了一个功能,记录用户浏览过的产品页面。我的思路是,客户每次进入产品页面,就自己调用JS把产品信息以json的形式保存到cookie里面。 浏览记录的显示是从co