Таким образом, у меня есть многозначные отношения между двумя сущностями, Medewerker и Taak, вот код, который у меня есть для обоих:
@Entity
@Table(name = "T_MEDEWERKER")
public class Medewerker {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String naam;
private String functie;
@ManyToOne
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinColumn(name = "festivalId", nullable = false)
private Festival festival;
@ManyToMany
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinTable(name="T_MEDEWERKER_TAAK",
joinColumns = {@JoinColumn(name="medewerkerId")},
inverseJoinColumns = {@JoinColumn(name="taakId")})
private List<Taak> taken = new ArrayList<Taak>();
public Medewerker(){
}
public Medewerker(String naam, String functie) {
this.naam = naam;
this.functie = functie;
}
public void addTaak(Taak t) {
taken.add(t);
}
public void setFestival(Festival festival) {
this.festival = festival;
}
}
@Entity
@Table(name = "T_TAAK")
public class Taak {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String omschrijving;
@ManyToMany
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@JoinTable(name="T_MEDEWERKER_TAAK",
joinColumns = {@JoinColumn(name="taakId")},
inverseJoinColumns = {@JoinColumn(name="medewerkerId")})
private List<Medewerker> medewerkers = new ArrayList<Medewerker>();
public Taak(){
}
public Taak(String omschrijving) {
this.omschrijving = omschrijving;
}
private void addMedewerker(Medewerker m){
medewerkers.add(m);
}
}
Теперь я хочу, чтобы средняя таблица (T_MEDEWERKER_TAAK) автоматически генерировалась с помощью режима гибернации через соединение. Однако я продолжаю получать следующую ошибку: 21:49:08,157 WARN SqlExceptionHelper:145 - Ошибка SQL: 1364, SQLState: HY000 21:49:08,158 ОШИБКА SqlExceptionHelper:147 - Поле 'taakId' не имеет значения по умолчанию
Однако поле taakid имеет автоматически сгенерированное значение, поэтому я действительно не понимаю, что я здесь делаю неправильно? Кроме того, плохо ли сопоставлять отношения «многие-многие» с обеих сторон? Потому что, если честно, я понятия не имею, в чем разница между размещением его на одной стороне или на обеих сторонах. Mysql создает составную таблицу, но не помещает внутрь никаких данных.
Если нужно, вот мой тестовый код:
public class TestMedewerker {
public static void main(String[] args) {
Medewerker m = new Medewerker("Jos", "Cameraman");
m.setFestival(new Festival("Rock Wercher", 3, "Werchter", 75000));
m.addTaak(new Taak("Filmen"));
m.addTaak(new Taak("Geluidsman Spelen"));
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
session.saveOrUpdate(m);
tx.commit();
}
}