Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠基础_Java_Hibernate_Design Patterns - Fatal编程技术网

Java 冬眠基础

Java 冬眠基础,java,hibernate,design-patterns,Java,Hibernate,Design Patterns,我正在使用hibernate和spring mvc,并使用注释。。 我希望如果子实体存在,则不应删除任何父实体。 现在我可以通过代码显式地完成它,但是可以通过hibernate直接完成吗,我的意思是配置 第二,在春天,我得到sessionFactory as和when(在每个dao中)。获取我使用的会话 sessionFactory.getCurrentSession() 我是否应该在Singleton类中获得session/sessionFactory并随时随地使用它 我正在使用 sessio

我正在使用hibernate和spring mvc,并使用注释。。 我希望如果子实体存在,则不应删除任何父实体。 现在我可以通过代码显式地完成它,但是可以通过hibernate直接完成吗,我的意思是配置

第二,在春天,我得到sessionFactory as和when(在每个dao中)。获取我使用的会话

sessionFactory.getCurrentSession()

我是否应该在Singleton类中获得session/sessionFactory并随时随地使用它

我正在使用

sessionFactory.getCurrentSession().save(批处理)

sessionFactory.getCurrentSession().delete(批处理)

然后,我就不需要为关闭和启动会话而烦恼了,因为它是自动完成的。我说的对吗

  • 这是由数据库中应有的外键约束保证的。如果子项具有其父项的外键,并且您尝试删除父项,则数据库将拒绝删除,并且您将得到一个异常

  • 是的,Spring会为您打开一个会话并将其与当前事务关联,并在事务结束时自动关闭它。你不应该关心开始和结束会议。将会话工厂注入DAO,并在每次需要时从该工厂获取当前会话


  • 您可以使用cascade:在hibernate中添加这样的约束怎么样,我知道可以通过db级别的约束来管理,但我认为ORM异常对于性能问题来说是很严重的,对吗??有没有办法通过配置来管理它。否则,我需要在删除每个实体之前为依赖项添加不同的检查。Hibernate不检查约束。数据库是这样做的。这是检查它们的唯一可靠的地方。您可以在模型中添加约束注释,让Hibernate在数据库模式中生成约束注释(如果使用模式生成)。您应该先考虑正确性,然后再考虑性能。好吧,aggred,所以如果我添加所有这些约束,那么在这两种约束中更好的实现方式是什么:1)我不应该担心cnstraint,因为它们在db中,直接调用delete,它将失败,我可以捕捉到它并显示存在某种依赖关系的消息,2)即使存在db级别约束,我也会通过代码显式检查它,并相应地显示错误。。。哪种方式是首选方式?如果第二种方法是首选的方法,那么我应该相信没有支持的通用方法来检查这种依赖性约束(我最初的问题)……使用第一种方法很难给出有意义的错误消息,因为异常无法提供一种简单且可移植的方法来知道是哪个约束导致了异常。因此,如果您想要清除错误消息,请使用第二个选项。但您需要执行查询。没有通用的检查方法。即使找不到任何子引用,如果另一个并发事务在检查和删除之间插入了子引用,则删除仍可能失败。