Spring MVC:@ManyToMany DAO?

Posted

技术标签:

【中文标题】Spring MVC:@ManyToMany DAO?【英文标题】:Spring MVC: @ManyToMany DAO? 【发布时间】:2014-08-24 17:15:28 【问题描述】:

在我的应用程序中,我正在尝试与其他字段创建多对多关系 遵循本教程:

hibernate-many-to-many-example-join-table-extra-column-annotation

我想知道关于将与这种关系相关的 DAO 方法放在何处的最佳实践。

是为关联创建一个特定的 dao(例如 StockCategoryDAO)还是将方法放在 StockDAO/Category 中更好?

例如,我对此感到困惑:

ex.1 - 一种为我提供与某个类别相关的所有股票的方法... 我不需要那个,因为我已经在 Category 模型类中有 getter...对吗?

ex.2 - 我将在 Stock 面板下有一个页面,我将在其中选择(复选框)哪些类别 与该股票相关联(该股票已存在于 db 中)。 提交后,在控制器中我得到所有选中的复选框(如果您知道如何执行此操作的示例,欢迎您)并且我必须调用一个服务方法(它封装了我的 dao)来插入 协会。 在这种情况下,最好使用 Stock 类的 setter,后跟 session.update(stock) 还是为每个选择的类别使用 StockCategoryService.addCategoryService(...)?

感谢您的建议

【问题讨论】:

关系类是一个很好的模式,它可能会让您免于其他麻烦,例如在哪里保存和引用关系特定元数据(您提到的其他字段)。如果有与关系关联的字段,那么它们不属于关系两侧的对象,属于关系本身,因此需要在 java 中以某种方式表示。这意味着您实际上并没有多对多的关系,而是实际上具有多对一的关系。 本教程展示了如何为每个实体和多对一多实体类编写模型类。但我的问题集中在道类上。顺便说一句,您的评论帮助我更好地理解了多对多关系。谢谢 【参考方案1】:

我认为基本设计应该是“每个模型类都应该有自己的 DAO 类,其中定义了所有方法,在特定模型上运行”。这也包括所有吸气剂。

DAO 方法基于模型。

因此,您需要将 Stock 的所有 getter 方法放在 StockDAO 类中。

如果你使用 jdbctemplate 并且想要返回自定义对象,你可以将 RowMapper 类定义为 DAO 类中的内部类

我建议你使用 JdbcTemplate 类。这样可以最小化 DAO 类中的代码。

这里我列出了执行此实现的步骤:

    在 spring.xml 中声明 JdbcTemplate bean,并将数据源 bean 作为 jdbcTemplate bean 的属性注入

(因此在初始化期间,JdbcTemplate 本身是使用正确的数据源创建的)

    为每个模型实现 DAO 类。在 DAO 类中定义所有方法(包括 getter)。

    如果您的 getter 方法返回自定义对象,请将 rowMapper 类实现为 DAO 类中的内部类。 (实现rowMapper给jdbcTemplate,一个关于结果集的感觉)

【讨论】:

感谢您的精彩解释。为了清晰的代码和良好的组织,我也认为最好为每个模型编写一个 DAO。顺便说一句,我正在使用休眠,所以我认为 jdbcTemplate 不适合我......对吗? 是的,没错!对于休眠,您可以使用 HibernateDAO 支持类 我在为这种多对多关系制作带有复选框的表单时遇到了很大的麻烦。我写了一个关于这个的问题。如果有人可以看看我会非常非常高兴@ 987654321@

以上是关于Spring MVC:@ManyToMany DAO?的主要内容,如果未能解决你的问题,请参考以下文章

Spring JPA 并从 @ManyToMany 中删除条目

spring jpa ManyToMany 理解和使用

如何在 Spring 中连接 @ManyToMany 关系

Spring Boot ManyToMany - *** - JPA,Hibernate

休眠 Spring:@ManyToMany DataIntegrityViolationException ConstraintViolationException

Spring Data、REST 和 ManyToMany 关系