Java Hibernate session.save with new

Java Hibernate session.save with new,java,hibernate,Java,Hibernate,以下两者之间是否有区别: Object o = new Object(); session.save(o) 及 我之所以这样问,是因为我发现有时在我的实现中对象被混淆了。在生产数据库中发现差异。所以很难测试 以下是编辑后的代码: pubic class Product { Logger logger = Logger.getRootLogger(); private String globalId; public void service() {

以下两者之间是否有区别:

Object o = new Object();
session.save(o)

我之所以这样问,是因为我发现有时在我的实现中对象被混淆了。在生产数据库中发现差异。所以很难测试

以下是编辑后的代码:

pubic class Product {
     Logger logger = Logger.getRootLogger();
     private String globalId;


     public void service() {

         this.gobalId = getVariable("GLOBALID"); //from Asterisk
         Transaction tran = null;
         try {
              Session session = HibernateUtil.getCurrentSession();
              int charge=0;
              //set charge
              Transaction tran = session.beginTransaction();
              session.save(new Packet(globalId, charge));
              tran.commit();
         } catch (Exception e) {
              if (tran != null) tran.rollback();
              logger.error("Error", e);
         } finally {
              HibernateUtil.closeCurrentSession();
         }
   }
}

在运行时,我在Packet表中看到重复的globalId行,其charge列的值不同。globalId应该是唯一的,即使它不是表中的主键。可能有两种解释:

  • Asterisk正在getVariable()方法中为globalId发送错误的值
  • 服务方法需要同步(Asterisk Java API表示产品类是像Servlet一样实现的)
我在日志中没有看到任何错误。因此,代码中不会抛出异常

感谢您的帮助


谢谢

你说的“混淆”是什么意思?!请看编辑后的问题
pubic class Product {
     Logger logger = Logger.getRootLogger();
     private String globalId;


     public void service() {

         this.gobalId = getVariable("GLOBALID"); //from Asterisk
         Transaction tran = null;
         try {
              Session session = HibernateUtil.getCurrentSession();
              int charge=0;
              //set charge
              Transaction tran = session.beginTransaction();
              session.save(new Packet(globalId, charge));
              tran.commit();
         } catch (Exception e) {
              if (tran != null) tran.rollback();
              logger.error("Error", e);
         } finally {
              HibernateUtil.closeCurrentSession();
         }
   }