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();
}
}