java - 使用Hibernate保存失败

标签 java sql hibernate

使用Hibernate保存失败

当我使用 hibernate 将实体保存到数据库时。尽管控制台中没有任何异常或错误(我已经正确配置了log4j)。 控制台没有insert sql,数据库也没有数据。

奇怪,我可以成功使用hibernate从数据库获取数据,并且控制台中有select sql。

顺便说一句,我使用 myeclipse 逆向工程来构建模型和 hbm 文件。

我尝试了多种方法但都失败了:

  1. 这与事务无关,我在 TeamService 中提交。

  2. 我设置了log4j.properties来查看所有错误,但没有异常(exception)。

  3. 我尝试将需要保存的实体分配给新实例,但仍然没有数据

  4. 我认为这是关于 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/

相关文章:

c# - Linq to Entities - 是否可以在对数据库的单个查询中实现这一点?

java - 我有哪些优化这个 Spring/Hibernate 页面的选项?

java - JPA系统异常访问字段错误

java - 同步语句 - 同步方法和同步语句是否等价?

mysql - 如何在 mysql 中索引(或查看)两个表?

java - 将进程作为后台服务运行会导致异常

sql - 你能从 SQL Server 2012 复制到 2008 R2

hibernate - hibernate 为什么以及如何被称为轻量级 ORM 工具?

java - MongoDB:在 Java 中使用 $gte 和 $lte 进行查询

java - 如何使用java流创建一个固定长度和特定数字的int[]?