使用Hibernate保存失败
当我使用 hibernate 将实体保存到数据库时。尽管控制台中没有任何异常或错误(我已经正确配置了log4j)。 控制台没有insert sql,数据库也没有数据。
奇怪,我可以成功使用hibernate从数据库获取数据,并且控制台中有select sql。
顺便说一句,我使用 myeclipse 逆向工程来构建模型和 hbm 文件。
我尝试了多种方法但都失败了:
这与事务无关,我在 TeamService 中提交。
我设置了log4j.properties来查看所有错误,但没有异常(exception)。
我尝试将需要保存的实体分配给新实例,但仍然没有数据
我认为这是关于 hbm 中的 composite-id 的问题,但我不知道如何修复它。
这是我的团队实体(我删除了不相关的部分)
private TeamId id;
private Classes classes;
这是我的团队 hbm
<hibernate-mapping>
<class name="edu.wzy.model.Team" table="team" catalog="test3" >
<composite-id name="id" class="edu.wzy.model.TeamId">
<key-property name="TNo" type="java.lang.Integer">
<column name="T_NO" />
</key-property>
<key-many-to-one name="SUser" class="edu.wzy.model.SUser">
<column name="S_ID" />
</key-many-to-one>
</composite-id>
<many-to-one name="classes" class="edu.wzy.model.Classes" fetch="select">
<column name="C_ID" not-null="true">
</column>
</many-to-one>
</class>
</hibernate-mapping>
这是我的 TeamService
public class TeamServiceImpl implements TeamService
{
TeamDAO teamDAO=new TeamDAO();
public void save(Team t)
{
Session session=HibernateUtil.getCurrentSession();
session.getTransaction().begin();
teamDAO.save(t);
session.getTransaction().commit();
}
}
这是我的道
public void save(Team transientInstance)
{
try
{
getSession().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re)
{
log.error("save failed", re);
throw re;
}
}
这是我的操作(我删除了不相关的部分)
public class TeamAction extends BaseAction implements ModelDriven<Team>
{
public String add()
{
Classes classes = classesService.findbyid(team.getClasses().getId());
Set s = team.getClasses().getStudents();
Iterator it = s.iterator();
while (it.hasNext())
{studentid = (String) it.next();}
Student student = studentService.findbyid(Integer.parseInt(studentid));
Team t=new Team();
t.setId(team.getId());
classes.getStudents().add(student);
t.setClasses(classes);
teamService.save(t);
return SUCCESS;
}
}
最佳答案
在提交之前尝试session.flush()
。就像
public class TeamServiceImpl implements TeamService {
TeamDAO teamDAO = new TeamDAO();
public void save(Team t) {
Session session = HibernateUtil.getCurrentSession();
session.getTransaction().begin();
teamDAO.save(t);
session.flush();
session.clear();
session.getTransaction().commit();
session.close();
}
}
关于java - 使用Hibernate保存失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24341460/