任何人都可以用简单的话来解释Hibernate中的第一级和第二级缓存是什么?
我得到以下异常:
Exception in thread "main" org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at sei.persistence.wf.entities.Element_$$_jvstc68_47.getNote(Element_$$_jvstc68_47.java)
at JSON_to_XML.createBpmnRepresantation(JSON_to_XML.java:139)
at JSON_to_XML.main(JSON_to_XML.java:84)
Run Code Online (Sandbox Code Playgroud)
当我尝试从main调用以下行时:
Model subProcessModel = getModelByModelGroup(1112);
System.out.println(subProcessModel.getElement().getNote());
Run Code Online (Sandbox Code Playgroud)
我getModelByModelGroup(int modelgroupid)首先实现了这个方法,如下所示:
public static Model getModelByModelGroup(int modelGroupId, boolean openTransaction) {
Session session = SessionFactoryHelper.getSessionFactory().getCurrentSession();
Transaction tx = null;
if (openTransaction) {
tx = session.getTransaction();
}
String responseMessage = "";
try {
if (openTransaction) {
tx.begin();
}
Query query = session.createQuery("from Model where modelGroup.id = :modelGroupId");
query.setParameter("modelGroupId", modelGroupId); …Run Code Online (Sandbox Code Playgroud) 我一直患有臭名昭着的hibernate异常
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
Run Code Online (Sandbox Code Playgroud)
现在社区正在欢呼
<property name="hibernate.enable_lazy_load_no_trans" value="true"/>
说它解决了问题,但小心使用它.
他们的意思是谨慎使用它?这个属性实际上做了什么?
请给我任何见解.提前致谢.
iBatis和myBatis有什么区别?我在哪里可以找到一个完美的例子?请建议.我通过谷歌找不到这个问题的链接.
MyBatis有任何功能允许从像Hibernate那样的de Class Model创建SQL模式吗?
我在谷歌寻找,我只找到有关MyBatis Generator的信息(http://mybatis.github.io/generator/).这个工具似乎对从SQL Schema生成Java模型很有用,这与我想要的相反.
在 Spring Boot 教程站点上,我阅读了以下内容:
Spring Framework 的优点在于它不会尝试解决已经解决的问题。它所做的只是提供与提供出色解决方案的框架的良好集成。
- ORM的休眠
- 用于对象映射的 iBatis
这就是 Hibernate 解释其目的的方式:
Hibernate ORM 使开发人员能够更轻松地编写数据超过应用程序进程的应用程序。作为对象/关系映射 (ORM) 框架,Hibernate 关注数据持久性,因为它适用于关系数据库(通过 JDBC)。
除了 iBatis 更名为 MyBatis 之外,MyBatis 提供的解决方案似乎与 ORM 方法不同。在他们的介绍页面上,MyBatis 的创建者写道:
MyBatis 是一流的持久化框架,支持自定义 SQL、存储过程和高级映射。MyBatis 消除了几乎所有的 JDBC 代码和手动设置参数和检索结果。MyBatis 可以使用简单的 XML 或注解进行配置,并将原语、Map 接口和 Java POJO(Plain Old Java Objects)映射到数据库记录。
所以我的猜测是Object Mapping一定更接近于数据库、SQL、存储过程等。不知道能不能应用于NoSQL数据库。而 ORM 只涉及关系数据库。
是ORM从真正不同的对象映射或者他们同义词?有什么不同?
我们的Java EE Web应用程序使用iBatis(ORM)执行数据库操作.数据库操作流程如下
流程:JSP ---> Action ---> ServiceIMpl ---> DaoImpl ---->通过'IBatis调用更新查询
注意:Action,Service和DAO类使用Spring 2.5的依赖注入技术进行实例化.我们使用Struts2.
问题:2个并发用户搜索相同的记录,User1更新Attribute1,而User2更新Attribute2.User1首先点击"保存",然后User2点击保存(它们相互跟随,差几秒).当我们在数据库中看到数据时,只存在User1的更新.审核列还仅显示User1的更新.User2对Attribute2的更新未完成,同时不会抛出异常.
我们尝试在iBatis中使用begin transaction和commit transaction来围绕sqlmap xml中定义的更新查询的调用.同样的问题仍然存在.我们还尝试删除这些事务命令,但问题仍然存在.
我们应该在更新期间做任何特殊/不同的事情来处理并发吗?像iBatis这样的ORM不会自己处理吗?
附加信息:进一步调查显示以下信息.
当User1和User2单击某条记录时,将获取完整的数据以供查看.
现在,当User1和User2都更改了少量属性并单击save(并发)时,首先更新User1的数据,然后在更新User2的数据时,User1的已更新数据被覆盖并丢失.
What approach is usually followed in such screens to handle such scenarios ?
hibernate ×5
java ×4
ibatis ×3
mybatis ×3
orm ×2
concurrency ×1
jpa ×1
lazy-loading ×1
nhibernate ×1
persistence ×1
session ×1
spring ×1
struts2 ×1