MySQLIntegrityConstraintViolationException при добавлении / обновлении OneToMany - PullRequest
0 голосов
/ 04 мая 2018

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

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

...