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 Boot ManyToMany - *** - JPA,Hibernate
休眠 Spring:@ManyToMany DataIntegrityViolationException ConstraintViolationException