我已经阅读了我在SO上发现的所有可能与我的问题有关的内容并且没有找到解决方案(我是Spring MVC和Hibernate的初学者)。 我在实体学生和活动之间有多对多关联,学生作为所有者方。当我尝试保存新活动时,活动将保存在活动表中,但不会在StudentActivity表中保存任何更改。
这些是学生和活动实体:
@Entity
@Table(name = "student")
public class Student implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "STUDENT_ID", unique = true, nullable = false)
private Integer studentId;
@Column(name = "FIRST_NAME", nullable = false, length = 50)
private String firstName;
@Column(name = "LAST_NAME", nullable = false, length = 50)
private String lastName;
@Column(name = "ROLL_NUMBER", nullable = false, length = 3)
private String rollNumber;
@Column(name = "ROLL_YEAR", nullable = false, length = 4)
private String rollYear;
@Column(name = "INDEX_NUMBER", unique = true, nullable = false, length = 20)
private String indexNumber;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
@JoinColumn(name = "PROGRAM_FK", nullable = false)
private Program program;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
@JoinTable(name="student_activity",
joinColumns = @JoinColumn(name = "STUDENT_FK"),
inverseJoinColumns = @JoinColumn(name = "ACTIVITY_FK"))
@ForeignKey(name = "FK_STUDENT_ACTIVITY_STUDENT",
inverseName = "FK_STUDENT_ACTIVITY_ACTIVITY")
private Set<Activity> activities = new HashSet<Activity>();
@Entity
@Table(name = "activity")
public class Activity implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "ACTIVITY_ID", unique = true, nullable = false)
private Integer activityId;
@Column(name = "ESSAY_FLAG", nullable = false)
private String essayFlag;
@Column(name = "ACTIVITY_DESCRIPTION", nullable = false, length = 255)
private String activityDescription;
@Column(name = "SUBMISSION_DATE", nullable = false)
private String submissionDate;
@Column(name = "SCORE", nullable = false)
private Integer score;
@Column(name = "NOTE")
private String note;
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.EAGER)
@JoinColumn(name = "COURSE_FK", nullable = false)
private Course course;
@ManyToMany(cascade = {CascadeType.ALL}, fetch=FetchType.EAGER)
@JoinTable(name="activity_teacher",
joinColumns = @JoinColumn(name = "ACTIVITY_FK"),
inverseJoinColumns = @JoinColumn(name = "TEACHER_FK"))
@ForeignKey(name = "FK_ACTIVITY_TEACHER_ACTIVITY",
inverseName = "FK_ACTIVITY_TEACHER_TEACHER")
private Set<Teacher> teachers;
@ManyToMany(mappedBy="activities")
private Set<Student> students = new HashSet<Student>();
这是来自处理保存的服务层的方法:
public void add(Integer studentId, Activity activity) {
logger.debug("Adding new activity");
// Retrieve session from Hibernate
Session session = sessionFactory.getCurrentSession();
// Retrieve existing student via id
Student existingStudent = (Student) session.get(Student.class, studentId);
// Add student to activity
activity.getStudents().add(existingStudent);
// Persist to db
session.save(activity);
}
这是Hibernate记录的内容:
[DEBUG] [http-bio-8080-exec-9 04:07:41] (ActivityService.java:add:42) Adding new activity
[TRACE] [http-bio-8080-exec-9 04:07:41] (TransactionSynchronizationManager.java:getResource:140) Retrieved value [org.springframework.orm.hibernate4.SessionHolder@1fcdd1af] for key [org.hibernate.internal.SessionFactoryImpl@47c105ec] bound to thread [http-bio-8080-exec-9]
[TRACE] [http-bio-8080-exec-9 04:07:41] (TransactionSynchronizationManager.java:getResource:140) Retrieved value [org.springframework.orm.hibernate4.SessionHolder@1fcdd1af] for key [org.hibernate.internal.SessionFactoryImpl@47c105ec] bound to thread [http-bio-8080-exec-9]
[DEBUG] [http-bio-8080-exec-9 04:07:41] (SqlStatementLogger.java:logStatement:104)
/* load org.jana.domain.Student */ select
student0_.STUDENT_ID as STUDENT_1_4_4_,
student0_.FIRST_NAME as FIRST_NA2_4_4_,
student0_.INDEX_NUMBER as INDEX_NU3_4_4_,
student0_.LAST_NAME as LAST_NAM4_4_4_,
student0_.PROGRAM_FK as PROGRAM_7_4_4_,
student0_.ROLL_NUMBER as ROLL_NUM5_4_4_,
student0_.ROLL_YEAR as ROLL_YEA6_4_4_,
activities1_.STUDENT_FK as STUDENT_1_4_6_,
activity2_.ACTIVITY_ID as ACTIVITY2_5_6_,
activity2_.ACTIVITY_ID as ACTIVITY1_0_0_,
activity2_.ACTIVITY_DESCRIPTION as ACTIVITY2_0_0_,
activity2_.COURSE_FK as COURSE_F7_0_0_,
activity2_.ESSAY_FLAG as ESSAY_FL3_0_0_,
activity2_.NOTE as NOTE4_0_0_,
activity2_.SCORE as SCORE5_0_0_,
activity2_.SUBMISSION_DATE as SUBMISSI6_0_0_,
course3_.COURSE_ID as COURSE_I1_2_1_,
course3_.COURSE_DESCRITPION as COURSE_D2_2_1_,
course3_.ESPB as ESPB3_2_1_,
teachers4_.ACTIVITY_FK as ACTIVITY1_0_7_,
teacher5_.TEACHER_ID as TEACHER_2_1_7_,
teacher5_.TEACHER_ID as TEACHER_1_6_2_,
teacher5_.FIRST_NAME as FIRST_NA2_6_2_,
teacher5_.LAST_NAME as LAST_NAM3_6_2_,
teacher5_.TITLE_FK as TITLE_FK4_6_2_,
program6_.PROGRAM_ID as PROGRAM_1_3_3_,
program6_.PROGRAM_DESCRIPTION as PROGRAM_2_3_3_
from
student student0_
left outer join
student_activity activities1_
on student0_.STUDENT_ID=activities1_.STUDENT_FK
left outer join
activity activity2_
on activities1_.ACTIVITY_FK=activity2_.ACTIVITY_ID
left outer join
course course3_
on activity2_.COURSE_FK=course3_.COURSE_ID
left outer join
activity_teacher teachers4_
on activity2_.ACTIVITY_ID=teachers4_.ACTIVITY_FK
left outer join
teacher teacher5_
on teachers4_.TEACHER_FK=teacher5_.TEACHER_ID
inner join
program program6_
on student0_.PROGRAM_FK=program6_.PROGRAM_ID
where
student0_.STUDENT_ID=?
Hibernate:
/* load org.jana.domain.Student */ select
student0_.STUDENT_ID as STUDENT_1_4_4_,
student0_.FIRST_NAME as FIRST_NA2_4_4_,
student0_.INDEX_NUMBER as INDEX_NU3_4_4_,
student0_.LAST_NAME as LAST_NAM4_4_4_,
student0_.PROGRAM_FK as PROGRAM_7_4_4_,
student0_.ROLL_NUMBER as ROLL_NUM5_4_4_,
student0_.ROLL_YEAR as ROLL_YEA6_4_4_,
activities1_.STUDENT_FK as STUDENT_1_4_6_,
activity2_.ACTIVITY_ID as ACTIVITY2_5_6_,
activity2_.ACTIVITY_ID as ACTIVITY1_0_0_,
activity2_.ACTIVITY_DESCRIPTION as ACTIVITY2_0_0_,
activity2_.COURSE_FK as COURSE_F7_0_0_,
activity2_.ESSAY_FLAG as ESSAY_FL3_0_0_,
activity2_.NOTE as NOTE4_0_0_,
activity2_.SCORE as SCORE5_0_0_,
activity2_.SUBMISSION_DATE as SUBMISSI6_0_0_,
course3_.COURSE_ID as COURSE_I1_2_1_,
course3_.COURSE_DESCRITPION as COURSE_D2_2_1_,
course3_.ESPB as ESPB3_2_1_,
teachers4_.ACTIVITY_FK as ACTIVITY1_0_7_,
teacher5_.TEACHER_ID as TEACHER_2_1_7_,
teacher5_.TEACHER_ID as TEACHER_1_6_2_,
teacher5_.FIRST_NAME as FIRST_NA2_6_2_,
teacher5_.LAST_NAME as LAST_NAM3_6_2_,
teacher5_.TITLE_FK as TITLE_FK4_6_2_,
program6_.PROGRAM_ID as PROGRAM_1_3_3_,
program6_.PROGRAM_DESCRIPTION as PROGRAM_2_3_3_
from
student student0_
left outer join
student_activity activities1_
on student0_.STUDENT_ID=activities1_.STUDENT_FK
left outer join
activity activity2_
on activities1_.ACTIVITY_FK=activity2_.ACTIVITY_ID
left outer join
course course3_
on activity2_.COURSE_FK=course3_.COURSE_ID
left outer join
activity_teacher teachers4_
on activity2_.ACTIVITY_ID=teachers4_.ACTIVITY_FK
left outer join
teacher teacher5_
on teachers4_.TEACHER_FK=teacher5_.TEACHER_ID
inner join
program program6_
on student0_.PROGRAM_FK=program6_.PROGRAM_ID
where
student0_.STUDENT_ID=?
[TRACE] [http-bio-8080-exec-9 04:07:41] (BasicBinder.java:bind:84) binding parameter [1] as [INTEGER] - 1
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:68) Found [null] as column [ACTIVITY1_0_0_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:68) Found [null] as column [COURSE_I1_2_1_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:68) Found [null] as column [TEACHER_1_6_2_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [A2] as column [PROGRAM_1_3_3_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [Some study program] as column [PROGRAM_2_3_3_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [Jana] as column [FIRST_NA2_4_4_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [A2 10/10] as column [INDEX_NU3_4_4_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [Janis] as column [LAST_NAM4_4_4_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [A2] as column [PROGRAM_7_4_4_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [10] as column [ROLL_NUM5_4_4_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [2010] as column [ROLL_YEA6_4_4_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:68) Found [null] as column [STUDENT_1_4_6_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:68) Found [null] as column [ACTIVITY1_0_7_]
[DEBUG] [http-bio-8080-exec-9 04:07:42] (SqlStatementLogger.java:logStatement:104)
/* get current state org.jana.domain.Course */ select
course_.COURSE_ID,
course_.COURSE_DESCRITPION as COURSE_D2_2_,
course_.ESPB as ESPB3_2_
from
course course_
where
course_.COURSE_ID=?
Hibernate:
/* get current state org.jana.domain.Course */ select
course_.COURSE_ID,
course_.COURSE_DESCRITPION as COURSE_D2_2_,
course_.ESPB as ESPB3_2_
from
course course_
where
course_.COURSE_ID=?
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [1] as [VARCHAR] - OAS123
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [Internet marketing] as column [COURSE_D2_2_]
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicExtractor.java:extract:74) Found [5] as column [ESPB3_2_]
[DEBUG] [http-bio-8080-exec-9 04:07:42] (SqlStatementLogger.java:logStatement:104)
/* insert org.jana.domain.Activity
*/ insert
into
activity
(ACTIVITY_DESCRIPTION, COURSE_FK, ESSAY_FLAG, NOTE, SCORE, SUBMISSION_DATE)
values
(?, ?, ?, ?, ?, ?)
Hibernate:
/* insert org.jana.domain.Activity
*/ insert
into
activity
(ACTIVITY_DESCRIPTION, COURSE_FK, ESSAY_FLAG, NOTE, SCORE, SUBMISSION_DATE)
values
(?, ?, ?, ?, ?, ?)
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [1] as [VARCHAR] - Blah blah
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [2] as [VARCHAR] - OAS123
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [3] as [VARCHAR] - Essay
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [4] as [VARCHAR] -
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [5] as [INTEGER] - 30
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [6] as [VARCHAR] - 28.01.2014
[TRACE] [http-bio-8080-exec-9 04:07:42] (TransactionAspectSupport.java:commitTransactionAfterReturning:473) Completing transaction for [org.jana.service.ActivityService.add]
[TRACE] [http-bio-8080-exec-9 04:07:42] (TransactionAspectSupport.java:commitTransactionAfterReturning:473) Completing transaction for [org.jana.service.ActivityService.add]
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerBeforeCommit:923) Triggering beforeCommit synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerBeforeCommit:923) Triggering beforeCommit synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerBeforeCompletion:936) Triggering beforeCompletion synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerBeforeCompletion:936) Triggering beforeCompletion synchronization
[DEBUG] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:processCommit:753) Initiating transaction commit
[DEBUG] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:processCommit:753) Initiating transaction commit
[DEBUG] [http-bio-8080-exec-9 04:07:42] (HibernateTransactionManager.java:doCommit:550) Committing Hibernate transaction on Session [SessionImpl(PersistenceContext[entityKeys=[EntityKey[org.jana.domain.Activity#33], EntityKey[org.jana.domain.Student#1], EntityKey[org.jana.domain.Program#A2], EntityKey[org.jana.domain.Teacher#5]],collectionKeys=[CollectionKey[org.jana.domain.Student.activities#1], CollectionKey[org.jana.domain.Teacher.activities#5]]];ActionQueue[insertions=[] updates=[] deletions=[] orphanRemovals=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[] collectionQueuedOps=[] unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])]
[DEBUG] [http-bio-8080-exec-9 04:07:42] (HibernateTransactionManager.java:doCommit:550) Committing Hibernate transaction on Session [SessionImpl(PersistenceContext[entityKeys=[EntityKey[org.jana.domain.Activity#33], EntityKey[org.jana.domain.Student#1], EntityKey[org.jana.domain.Program#A2], EntityKey[org.jana.domain.Teacher#5]],collectionKeys=[CollectionKey[org.jana.domain.Student.activities#1], CollectionKey[org.jana.domain.Teacher.activities#5]]];ActionQueue[insertions=[] updates=[] deletions=[] orphanRemovals=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[] collectionQueuedOps=[] unresolvedInsertDependencies=UnresolvedEntityInsertActions[]])]
[DEBUG] [http-bio-8080-exec-9 04:07:42] (SqlStatementLogger.java:logStatement:104)
/* update
org.jana.domain.Teacher */ update
teacher
set
FIRST_NAME=?,
LAST_NAME=?,
TITLE_FK=?
where
TEACHER_ID=?
Hibernate:
/* update
org.jana.domain.Teacher */ update
teacher
set
FIRST_NAME=?,
LAST_NAME=?,
TITLE_FK=?
where
TEACHER_ID=?
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [1] as [VARCHAR] - Pery
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [2] as [VARCHAR] - White
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [3] as [INTEGER] - 4
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [4] as [INTEGER] - 5
[DEBUG] [http-bio-8080-exec-9 04:07:42] (SqlStatementLogger.java:logStatement:104)
/* insert collection
row org.jana.domain.Activity.teachers */ insert
into
activity_teacher
(ACTIVITY_FK, TEACHER_FK)
values
(?, ?)
Hibernate:
/* insert collection
row org.jana.domain.Activity.teachers */ insert
into
activity_teacher
(ACTIVITY_FK, TEACHER_FK)
values
(?, ?)
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [1] as [INTEGER] - 33
[TRACE] [http-bio-8080-exec-9 04:07:42] (BasicBinder.java:bind:84) binding parameter [2] as [INTEGER] - 5
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerAfterCommit:949) Triggering afterCommit synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerAfterCommit:949) Triggering afterCommit synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerAfterCompletion:965) Triggering afterCompletion synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (AbstractPlatformTransactionManager.java:triggerAfterCompletion:965) Triggering afterCompletion synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (TransactionSynchronizationManager.java:clearSynchronization:331) Clearing transaction synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (TransactionSynchronizationManager.java:clearSynchronization:331) Clearing transaction synchronization
[TRACE] [http-bio-8080-exec-9 04:07:42] (TransactionSynchronizationManager.java:doUnbindResource:243) Removed value [org.springframework.orm.hibernate4.SessionHolder@1fcdd1af] for key [org.hibernate.internal.SessionFactoryImpl@47c105ec] from thread [http-bio-8080-exec-9]
[TRACE] [http-bio-8080-exec-9 04:07:42] (TransactionSynchronizationManager.java:doUnbindResource:243) Removed value [org.springframework.orm.hibernate4.SessionHolder@1fcdd1af] for key [org.hibernate.internal.SessionFactoryImpl@47c105ec] from thread [http-bio-8080-exec-9]
[TRACE] [http-bio-8080-exec-9 04:07:43] (TransactionSynchronizationManager.java:doUnbindResource:243) Removed value [org.springframework.jdbc.datasource.ConnectionHolder@54aadf5f] for key [com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1g5z4wg8zs5ylz61mbp71x|3ae24197, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1g5z4wg8zs5ylz61mbp71x|3ae24197, idleConnectionTestPeriod -> 60, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/essaysdb?useUnicode=true&characterEncoding=UTF-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 10, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]] from thread [http-bio-8080-exec-9]
[TRACE] [http-bio-8080-exec-9 04:07:43] (TransactionSynchronizationManager.java:doUnbindResource:243) Removed value [org.springframework.jdbc.datasource.ConnectionHolder@54aadf5f] for key [com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1g5z4wg8zs5ylz61mbp71x|3ae24197, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1g5z4wg8zs5ylz61mbp71x|3ae24197, idleConnectionTestPeriod -> 60, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost:3306/essaysdb?useUnicode=true&characterEncoding=UTF-8, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 50, maxStatementsPerConnection -> 0, minPoolSize -> 10, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]] from thread [http-bio-8080-exec-9]
[DEBUG] [http-bio-8080-exec-9 04:07:43] (HibernateTransactionManager.java:doCleanupAfterCompletion:632) Closing Hibernate Session
...
我错过了什么?
更新和解决方案:
我必须更新多对多关系的两个方面,如下所示:
public void add(Integer studentId, Activity activity) {
logger.debug("Adding new activity");
// Retrieve session from Hibernate
Session session = sessionFactory.getCurrentSession();
// Retrieve existing student via id
Student existingStudent = (Student) session.get(Student.class, studentId);
// Add activity to student - THIS IS NEW !!!
existingStudent.getActivities().add(activity);
// Add student to activity
activity.getStudents().add(existingStudent);
// Persist to db
session.save(activity);
}
This回答有帮助!我以前错过了它:/