我有表Animal和OneToMany映射到表EventAnimal:
ID
表EventAnimal看起来像这样
@OneToMany(mappedBy = "animal")
public Set<EventAnimal> getEventAnimals() {
return eventAnimals;
}
当我向动物添加事件动物并保存动物时,数据库没有更新:
@Entity
@Table(name = "eventAnimal")
public class EventAnimal {
@Id
int id;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "userEvent_id")
UserEvent userEvent;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "animal_id", nullable=false)
Animal animal;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "eventAnimalClass_id")
EventAnimalClass eventAnimalClass;
}
我做错了什么?
当我尝试插入事件动物时,例如 //Create EventAnimal object, set properties
eventAnimal.setUserEvent(newEvent);
eventAnimal.setAnimal(animal);
animal.getEventAnimals().add(eventAnimal);
animalPersistenceService.saveAnimal(animal);
而不是
eventAnimalDao.insert(eventAnimal);
我得到的例外是“animal_id”没有默认值,即使我设置了它。
答案 0 :(得分:0)
您的ID生成策略是什么?您是自己生成ID还是将其留给数据库?如果它将是数据库放置:
@GeneratedValue(strategy=GenerationType.AUTO)
您可能希望将键更新为Integer而不是int,但不要认为这是问题。
此外,如果您想在动物中添加事件并希望保留它,请将映射更新为:
@OneToMany(mappedBy = "animal", cascade = CascadeType.ALL)
答案 1 :(得分:0)
我将table Company与OneToMany映射到表Customer:
//bi-directional many-to-one association to Customer
@OneToMany(mappedBy="company")
private Set<Customer> customer;
我从tis格式映射:
//bi-directional many-to-one association to Company
@ManyToOne
@JoinColumn(name="company_id")
private Company company;
我已经使用了这段代码,成功添加,编辑和删除功能正在运行。
添加功能:
Customer customer = new Customer();
Company company = new Company();
company.setCompanyId(intCompanyId);
customer.setCompany(company);
答案 2 :(得分:0)
我解决了这个问题。这是一个相当愚蠢的错误 - 脚本没有从表中删除一个外键,我也不在乎查看SQL表。