MySQLIntegrityConstraintViolationException при добавлении / обновлении OneToMany

Я использую отношения "один ко многим" с гибернацией и весенней загрузкой, и я получаю эту ошибку при добавлении новой компании или обновлении компании

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'activity' cannot be null

и та же ошибка при добавлении нового контакта или обновлении контакта

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'fk_company' cannot be null

Мои классы Entity:

@Entity
public class Company {
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY)   
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
    @Column(name = "name", unique = true, nullable = false)
    private String name;  
    @Column(name = "activity", nullable = false)
    private String activity;
    @Column(name = "address", nullable = false)
    private String address;
    @Column(name = "city", nullable = false)
    private String city;
    @Column(name = "logo", nullable = true)
    private String logo;
    @OneToMany(cascade = {CascadeType.ALL}, mappedBy = "company", fetch = FetchType.LAZY)
    @JsonManagedReference
    private Set<Contact> contacts = new HashSet<Contact>();
}   

@Entity
public class Contact implements Serializable{
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
    @Column(name = "email", unique = true, nullable = false)
    private String email;   
    @Column(name = "phone", unique = true, nullable = false)
    private long phone;
    @Column(name = "firstName", nullable = false)
    private String firstName;
    @Column(name = "lastName", nullable = false)
    private String lastName;
    @Column(name = "job", nullable = false)
    private String job;
    @Column(name = "birthday", nullable = true)
    private Date birthday;
    @ManyToOne
    @JoinColumn(name = "fk_company", nullable = false)
    @JsonBackReference
    private Company company;
}

Вот код сохранения / обновления компании или контакта

@RestController
public class CompanyRestService {

    @Autowired
    private CompanyRepository companyRepository;

    @RequestMapping(value = "/companies", method=RequestMethod.POST)
    @ResponseBody
    public Company save(Company c){
        return companyRepository.save(c);
   }
   @RequestMapping(value = "/companies/{id}", method=RequestMethod.PUT)
   @ResponseBody
   public Company update(@PathVariable Long id, Company c){
       c.setId(id);
       return companyRepository.save(c);
   }
}

ving @RestController
public class ContactRestService {

    @Autowired
    private ContactRepository contactRepository;

      @RequestMapping(value = "/contacts", method=RequestMethod.POST)
    @ResponseBody
    public Contact save(Contact c){
        return contactRepository.save(c);
       }
      @RequestMapping(value = "/contacts/{id}", method=RequestMethod.PUT)
    @ResponseBody
    public Contact update(@PathVariable Long id, Contact c){
        c.setId(id);
        return contactRepository.save(c);
       }
}

Я уже пытался сохранить и обновить контакт без сопоставления «OneToMany», и у меня это сработало. Интересно, проблема в сопоставлении? Вы знаете, что может вызвать эту проблему?

Ссылка на проект Github

Это не проблема отображения. В данных вашего запроса отсутствует ключ активности при сохранении компании. Так что проверьте запрашиваемые данные.

Ajay Garg 04.05.2018 10:23

но первичным ключом является АВТОМАТИЧЕСКОЕ УВЕЛИЧЕНИЕ, поэтому нет необходимости добавлять его при сохранении новой записи.

sihamxxi 05.05.2018 01:46

Да, но активность - это не ваш первичный ключ. Ваш первичный ключ - это идентификатор в таблице компании. Можете ли вы поделиться данными json, которые вы отправляете, чтобы спасти компанию?

Ajay Garg 06.05.2018 08:20
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
125
0

Другие вопросы по теме