Java 休眠实体未被持久化
我正在构建一个基于SpringMVC和Hibernate的web应用程序。我有一个现有的域模型,应用程序基本上正在运行 我有一个名为Status的域对象和一个对应的Spring服务类,其中包含您期望的标准CRUD方法(Java 休眠实体未被持久化,java,hibernate,spring,jpa,spring-mvc,Java,Hibernate,Spring,Jpa,Spring Mvc,我正在构建一个基于SpringMVC和Hibernate的web应用程序。我有一个现有的域模型,应用程序基本上正在运行 我有一个名为Status的域对象和一个对应的Spring服务类,其中包含您期望的标准CRUD方法(createStatus(Status s);等等)。保持新状态的方法当前工作正常,如下所示: @Transactional public void createStatus(Status s) { statusDao.persist(s); }
createStatus(Status s)
;等等)。保持新状态的方法当前工作正常,如下所示:
@Transactional
public void createStatus(Status s) {
statusDao.persist(s);
}
@Transactional
public void createStatus(Status s) {
statusDao.persist(s);
Notification n = new Notification();
getEntityManager().persist(n);
}
一切都很愉快,工作也很好。然后,我添加了一个名为Notification的新域对象,在将该对象持久化到DB时遇到问题(没有保存任何内容,也没有记录任何错误)-因此为了测试这一点,我临时尝试创建一个虚拟通知对象,并将其持久化到createStatus()方法中(我知道这很难看——但重点是试图在我知道事务正在工作且其他对象正在持久化的地方将其持久化——这是为了排除事务性问题)
更新后的创建方法如下所示:
@Transactional
public void createStatus(Status s) {
statusDao.persist(s);
}
@Transactional
public void createStatus(Status s) {
statusDao.persist(s);
Notification n = new Notification();
getEntityManager().persist(n);
}
现在,当我运行它时,状态仍然保持不变,但是通知对象仍然没有保持不变,并且日志中没有错误
是否有人在特定实体未被持久化的情况下遇到过类似的问题
更新: 以下是实体(状态和通知)-它是注释驱动的,因此没有hbm文件: 地位:
@Entity
@Table(name = "BF_STATUS")
@DiscriminatorValue("Status")
public class Status extends PersistableObject {
private static final long serialVersionUID = 4925606208793500282L;
@Column(name = "TITLE")
protected String title;
@Column(name = "DEADLINE")
private Date deadline;
@Column(name = "DETAILS")
@Lob
protected String details;
...
Accesors/Mutators
}
通知:
@Entity
@Table(name = "BF_NOTIFICATION")
@DiscriminatorValue("notification")
public class Notification extends PersistableObject {
private static final long serialVersionUID = -8935712447903901463L;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "LINKED_ACTIVITY", nullable = true)
private Activity activity;
@Column(name = "notificationRead")
private boolean read = false;
...
Accessors/Mutators
}
我曾经遇到过这个问题,原因如下:
- 数据库MySQL-Id没有标记为
,并且在我的服务impl中没有catch块,因此没有记录异常自动增量
- 数据库语义发生更改,再次出现无catch块或空catch块,但未记录异常
- 不正确的log4j.xml根本没有记录异常!,
出现异常exp.printStackTrace()
现在,您可以用有效的try-catch来包围代码,看看是否有什么问题吗?我曾经遇到过这个问题,原因如下:
- 数据库MySQL-Id没有标记为
,并且在我的服务impl中没有catch块,因此没有记录异常自动增量
- 数据库语义发生更改,再次出现无catch块或空catch块,但未记录异常
- 不正确的log4j.xml根本没有记录异常!,
出现异常exp.printStackTrace()
现在,您可以用有效的try-catch来包围您的代码并查看是否有什么内容了吗?您可以共享您的hbm文件吗?可能您缺少hbm文件上通知类的定义?或者您缺少注释,或者可能缺少配置?从这么多内容中很难理解。使用注释域实体更新您可以共享吗e您的hbm文件?可能您缺少hbm文件上通知类的定义?或者您缺少批注,或者可能缺少配置?从这么多内容中很难理解。使用带批注的域实体更新