【问题标题】:seam-gen doesn't generate EntityQuery interfaces for @ManyToMany membersseam-gen 不会为 @ManyToMany 成员生成 EntityQuery 接口
【发布时间】:2011-01-05 14:28:43
【问题描述】:

@org.jboss.seam.annotations.security.management.UserRoles 暴露在用户界面中返回一个简单的 List 方法。

seam-gen 不会像上面提到的 getUserRoles 那样为 @ManyToMany 成员生成 EntityQuery 接口。

我们如何启用此功能,以便生成的角色以分页方式显示。

编辑 1:

This is the declaration in User.java

@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}, fetch = FetchType.LAZY)
@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id), inverseJoinColumns = @JoinColumn(name = "role_id"))
@UserRoles
private List<Role> userRoles = new ArrayList<Role>(0);

这是 Role.java 中的声明

@Entity
@Table(name = "role", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public class Role {

【问题讨论】:

    标签: seam


    【解决方案1】:

    正如 Seam 首席开发人员 Pete Muir 所说

    Seam-gen 不支持@ManyToMany 关系

    使用@ManyToMany 时不会生成用户界面。尽管 Seam-gen 让您的生活更轻松,但有时您必须手动完成工作。

    在继续之前

    1. Seam-gen 使用 Hibernate 的逆向工程工具
    2. 如果表中缺少外键,Seam-gen 无法假设一个表与另一个表相关

    ...

    所以我的建议是:

    1. 将@ManyToMany 关系拆分为@OneToMany - @ManyToOne 关系
    2. 设置逆向工程配置

    Seam-gen使用的逆向工程配置文件是生成项目中的resources/seam-gen.reveng.xml。

    也许你想看看

    Controlling reverse engineering

    Reverse engineering support in database and drivers

    添加到原始答案

    Seam 使用 Ant 生成您的应用程序。它的 build.xml 文件位于 /seam-gen/build.xml

    在那里,您将看到一个名为 generate-ui 的目标,如下所示

    <target name="generate-ui"
    

    它使用名为 hbmtemplate 的 Ant 工具。它是一个基于模板的引擎,可以由用户提供的模板或类控制。因此,如果您想要自定义行为,您应该提供自己的 Freemarker 模板。在/seam-gen/view目录下,可以看到很多Template文件(.flt扩展名)

    问候,

    【讨论】:

    • 目前,我有很多使用多对多关系的工作代码。拆分关系可能是此解决方案的正确解决方法,但有什么方法可以让现有的 @ManyToMany List 以分页方式呈现。我需要一种机制以某种方式将此列表绑定在 Seam 中的 EntityQuery 框架之上(注意:我不想重新执行现有代码,因为我们已经花了一些时间根据 @ManyToMany 关系让它工作)
    • @Joshua 感谢您的回复。星期六我会看看我如何帮助你实现目标。
    • @Arthur 期待您的回复(正如我之前提到的,基于现有的@ManyToMany 关系,我们有太多代码)
    • @Arthur 我知道作为 seam-gen 的一部分提供的 freemarker 模板。我想我真正的问题是因为@ManyToMany 是在父实体(即User.java)中指定的,所以我无法弄清楚为ManyToMany 生成基于EntityQuery 的类的机制。我的理解是,只有将类定义为@Entity 时,上述接口才有效。我不确定你是否可以使用抽象多对多关系的 POJO 来做同样的事情。
    • @Joshua 1º 我的理解是,只有将类定义为@Entity 时,上述接口才有效。我想是这样。如果您发布您的用户和角色类、Seam 设置(components.xml)、您正在使用哪个 sean-gem 命令以及您希望如何显示您的结果角色(查看代码),这将有所帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2010-12-12
    • 2011-01-30
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多