I have a izler birçok çoğa bir Rolü tarafından tanımlanan Kurs ve kullanıcı arasındaki ilişki olarak:@WhereJoinTable ile Hibernate kullanarak çoktan çoğa ilişkiyi nasıl kalıcı hale getirebilirim?
Kullanıcılar üç rollerden birine dayanarak Kursu ile ilişkilidir:
- Öğrenci (1)
- İşaretleyici (2)
- Öğretim benim veri modelinde (3)
, bir User
masa vesahiptablosu ve USERS_COURSES
tablosu. USERS_COURSES
, yukarıda sayılan değerlere bir tam sayı ile eşlenen fazladan bir sütuna sahip, çoktan çoğa standart bir birleştirme tablosudur. Benim hazırda varlık Course
yılında
, ben @WhereJoinTable(clause = "ROLE = 1")
ile @ManyToMany
olarak tanımlanan bir yöntem getStudents()
var. Bir dizi öğrenciyi bu yolla iyice öğrenebilirim, ancak bir öğrenciye belirli bir kursu eklemek istersem, bu gruba yeni bir kullanıcı ekleyemiyorum ve Course
nesnesini devam ettiremiyorum çünkü rol sütununda bir varsayılan yok değer.
Bu seti devam ettirdiğimde rol sütunu için bir değer belirleyebileceğim bir yol var mı?
İşte@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "USERS_COURSES",
joinColumns = {@JoinColumn(name = "COURSE_ID")},
inverseJoinColumns = {@JoinColumn(name = "USER_ID")})
@WhereJoinTable(clause = "ROLE = 1")
@SortComparator(User.FullNameComparator.class)
public SortedSet<User> getStudents() {
return students;
}
public void setStudents(SortedSet<User> students) {
this.students = students;
}
Bir test olarak yapmaya çalıştığınızı şey bu, ama o da çöküyor:
İşte başvuru için benim get/set yöntemleri var aşağıdaki gibi
Course course = getCourse(1);
User user = UserDAO.getUser(2);
course.getStudents().add(user);
modifyCourse(course);
modifyCourse
tanımlanır:
Transaction transaction = null;
try (Session session = HibernateUtil.getSession()) {
transaction = session.beginTransaction();
session.saveOrUpdate(course);
transaction.commit();
return course;
} catch (HibernateException e) {
LOG.error(e.getMessage(), e);
if (transaction != null) {
transaction.rollback();
}
return null;
}
Bu alıyorum hatadır:
2016-03-23 14:43:04,894 [main] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 1364, SQLState: HY000
2016-03-23 14:43:04,924 [main] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Field 'ROLE' doesn't have a default value
2016-03-23 14:43:04,928 [main] ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush [could not execute statement]
2016-03-23 14:43:04,972 [main] ERROR com.abopu.codedrop.db.dao.CourseDAO - could not execute statement
java.sql.SQLException: Alan 'ROLÜ' varsayılan bir değeri yoktur