Giải pháp
OK, bí ẩn đã được giải quyết! Hóa ra là tôi cần gọi rõ ràng tuôn ra () vào phiên đối tượng.
Câu trả lời sau cho tôi gợi ý:
Hibernate không lưu Đối tượng trong Cơ sở dữ liệu?
Ví dụ
Đây là một ví dụ hoạt động (chú ý đến session.flush()
phải được gọi là trước khi đóng một phiên ):
@Service
public class TableOneDaoImpl extends HibernateDaoSupport implements TableOneDao {
@Override
public void save(TableOne tableOne) throws Exception {
Session session = null;
try {
session = getSessionFactory().openSession();
session.save(tableOne);
session.flush();
} catch (Exception e) {
throw new Exception("Could not save tableOne!", e);
} finally {
if (session != null) {
session.close();
}
}
}
}
Và một lần nữa, khi sử dụng MySQL, nó hoạt động tốt mà không tuôn ra một cách rõ ràng.
Quan sát thú vị
Ứng dụng web thử nghiệm được đề cập ở trên đã sử dụng Hibernate thuần cấu hình và SessionFactory của Hibernate (tức là không có Persence.xml và JPA entityManager ). Nhưng tôi cũng có cùng một ứng dụng thử nghiệm được định cấu hình để sử dụng JPA . Và trong ứng dụng đó, mọi thứ cũng hoạt động mà không cần xóa rõ ràng cả với MySQL và PostgreSQL.