Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
冬眠4+;Spring 3.2+;事务:一个服务、多个Dao、一种方法_Spring_Hibernate_Service_Transactions_Dao - Fatal编程技术网

冬眠4+;Spring 3.2+;事务:一个服务、多个Dao、一种方法

冬眠4+;Spring 3.2+;事务:一个服务、多个Dao、一种方法,spring,hibernate,service,transactions,dao,Spring,Hibernate,Service,Transactions,Dao,我是Hibernate4和Spring3.2的初学者。 我已经阅读了一些关于stack的教程和讨论,但我没有找到一个明确的答案来回答我的问题。我认为最好的理解方式是询问和分享知识 我们走! 因此,每次创建一个Pojo、一个Dao、一个服务类时,都要使用带注释的transactionnal方法。没关系。我正在使用Sessionfactory处理我的事务。我在寻找良好的实践 1-如果您想从相同的服务中使用Delete方法和Save方法,您将如何使其在同一事务中工作。当我查看日志时,每个方法都在不同的

我是Hibernate4和Spring3.2的初学者。 我已经阅读了一些关于stack的教程和讨论,但我没有找到一个明确的答案来回答我的问题。我认为最好的理解方式是询问和分享知识

我们走! 因此,每次创建一个Pojo、一个Dao、一个服务类时,都要使用带注释的transactionnal方法。没关系。我正在使用Sessionfactory处理我的事务。我在寻找良好的实践

1-如果您想从相同的服务中使用Delete方法和Save方法,您将如何使其在同一事务中工作。当我查看日志时,每个方法都在不同的事务中执行

此SampleServiceImpl:

    @Transactional
    public void save(Sample sample){

        sampleDao.save(sample);
    }
    @Transactional
    public void delete(Sample sample){

        sampleDao.delete(sample);
    }

// A solution could be that , but not very clean...there should be an another way, no?

        @Transactional
        public void action(Sample sample){

        sampleDao.save(sample);

        sampleDao.delete(sample);
    }
2-如果您想从不同的服务类使用Delete方法和Save方法,您将如何使其在同一事务中工作。因为每个服务类中的每个方法都由Transactionnal注释处理。您是否创建一个全局服务,在一个方法中调用所有子服务

    SampleServiceImpl:

    @Transactional
    public void save(Sample sample){

        sampleDao.save(sample);
    }

        ParcicipantServiceImpl
        @Transactional 
        public void save(Participant participant){

         participantDao.save(participant);
    }

// A solution could be that , but not very clean...there should be an another way, no?
        GlobalServiceImpl

        @Transactional 
        public void save(Participant participant,Sample sample){

         participantDao.save(participant);
                 sampleDao.save(sample);
    }
3-还有最后一个问题,但不是最不重要的。如果您想在一个全局事务中使用来自多个服务的多个方法。假设您想在一个独立程序的一次执行中填充5个或多个表。因为每个服务都有其适当的事务方法,所以每次调用此方法时,都会有一个事务,这是怎么可能的呢

a-我已经成功地使用映射中的Mkyong教程和cascade属性填充了示例事务中的两个表。因此,我了解了如何使它适用于一个表直接连接到另一个表或多个表。 但是如果你有一个3表参与者->样本->衍生产品。您将如何在同一事务中填写这三个表

我不知道我是否清楚。但我希望高级用户能提供一些帮助或示例。 非常感谢你抽出时间

  • 您的解决方案很好,如果您想使用嵌套的事务性方法,这可能会起作用(注意,我几天前看到了这个解决方案,但没有对它进行测试):

  • 您的解决方案很好,如果您想使用嵌套的事务性方法,这可能会起作用(注意,我几天前看到了这个解决方案,但没有对它进行测试):


  • 你所遵循的方法是更干净的方法

    ServiceOpjects是包含业务逻辑的组件。因此,它们将始终通过数据对象进行操作。 我们在实践中所做的是创建另一个层,该层使用数据对象和同一层的其他函数调用。然后,通过具有注释
    @transactional
    的服务层调用这个全业务层


    你能说说为什么你认为这种方法很肮脏吗?

    你现在采用的方法更干净

    ServiceOpjects是包含业务逻辑的组件。因此,它们将始终通过数据对象进行操作。 我们在实践中所做的是创建另一个层,该层使用数据对象和同一层的其他函数调用。然后,通过具有注释
    @transactional
    的服务层调用这个全业务层


    你能告诉我为什么你认为这种方法是肮脏的吗?

    我不喜欢你用一系列动作(删除、保存、更新、选择等)来制作方法的想法。我希望有一种方法可以将唯一方法保持为单独的save/delete/update/select/other,并在我的主类中按照我希望在全局事务中的顺序组织它们。我不想每次都实现一个带有顺序动作的方法,因为实际上,您必须在调用子服务的parentService中编写一个方法。家长服务没有意义,只是方便处理您的交易。我认为你基本上可以直接做这件事,而不需要创建一个globalserviceme,这取决于你的需要。Fr eg当用户在我们的产品中创建时,我们需要在14个表中插入,并从1个表中删除。。。他们没有其他的方法来做这件事……我们总是想把它叫做addUser inspite,这样它对sameI来说就有了商业意义。我不喜欢你用一系列动作(删除、保存、更新、选择等)来创建方法的想法。我希望有一种方法可以将唯一方法保持为单独的save/delete/update/select/other,并在我的主类中按照我希望在全局事务中的顺序组织它们。我不想每次都实现一个带有顺序动作的方法,因为实际上,您必须在调用子服务的parentService中编写一个方法。家长服务没有意义,只是方便处理您的交易。我认为你基本上可以直接做这件事,而不需要创建一个globalserviceme,这取决于你的需要。Fr eg当用户在我们的产品中创建时,我们需要在14个表中插入,并从1个表中删除。。。他们没有其他的方法来做这件事…我们总是想把它叫做addUser inspite,这样它就有了同样的商业意义 @Transactional public void action(Sample sample){ save(sample); delete(sample); }
    @Transactional 
    public void save(Participant participant,Sample sample){
         participantDao.save(participant);
         sampleServiceImpl.save(sample); 
    }