seam-gen не генерирует интерфейсы EntityQuery для участников @ManyToMany - PullRequest
3 голосов
/ 15 января 2010

@org.jboss.seam.annotations.security.management.UserRoles, представленный в пользовательском интерфейсе, возвращает простой метод List.

seam-gen не генерирует интерфейсы EntityQuery для членов @ManyToMany, такие как getUserRoles, упомянутые выше.

Как мы можем включить это, чтобы результирующие роли отображались в разбивке на страницы.

Редактировать 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 {

1 Ответ

4 голосов
/ 27 января 2010

Как сказал Пит Мьюир, ведущий разработчик Seam

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 внутри сгенерированного проекта.

Может быть, вы хотите увидеть

Управление реверс-инжинирингом

Поддержка обратной инженерии в базе данных и драйверах

Добавлено в исходный ответ

Seam использует Ant для создания вашего приложения. Его файл build.xml находится в /seam-gen/build.xml

Там вы увидите цель с именем generate-ui следующим образом

<target name="generate-ui"

Он использует Ant Tool под названием hbmtemplate . Это механизм на основе шаблонов, в котором может управляться предоставленным пользователем шаблоном или классом . Так что, если вы хотите нестандартного поведения, вы должны предоставить свой собственный шаблон Freemarker. В каталоге / seam-gen / view вы можете увидеть множество файлов шаблонов (расширение .flt)

С уважением,

...