2010-02-16 3 views
3

У меня естьHibernate плюрализацию

  • базу данных, MySQL используется в настоящее время для производства приложения CakePHP
  • Java, SE приложение, осуществляющее доступ к одной базе данных через Hibernate, в настоящее время в стадии разработки.

Я использую функцию «автоматизировать» Netbeans для создания классов POJO и XML-файлов (действительно ли мне нужны файлы XML при использовании аннотаций?). Поскольку схема довольно сложна, создание таблиц вручную - это слишком много работы.

Cake ожидает, что все таблицы БД будут множественными (класс Address автоматически сопоставляется с таблицей адресов). При запуске автоматической миграции Netbeans он выполняет плюрализацию имен уже плюрализованных таблиц (я получаю методы Addresses.java и setAddresseses()).

Я знаю, что я прошу проблемы с запуском двух очень разных слоев данных в отношении одной и той же базы данных, но я хотел бы знать, возможно ли, что Netbeans генерирует классы POJO в единственной форме или если есть другое (лучше) способ управлять этим.

ответ

2

При обратном проектировании можно использовать custom reverse engineering strategy. Обозначение документации:

Возможно реализовать стратегию пользователя . Такая стратегия должна реализовать org.hibernate.cfg.reveng.ReverseEngineeringStrategy. Рекомендуются, чтобы один использует DelegatingReverseEngineeringStrategy и обеспечить общественный конструктор, который принимает другого ReverseEngineeringStrategy как аргумента. Это позволит вам реализовать только , а - резервная стратегия. Пример пользовательской стратегии делегирования, которая преобразует все имена столбцов, заканчивающихся с «PK» в свойство с именем «id».

public class ExampleStrategy extends DelegatingReverseEngineeringStrategy { 
    public ExampleStrategy(ReverseEngineeringStrategy delegate) { 
     super(delegate); 
    } 
    public String columnToPropertyName(TableIdentifier table, String column) { 
     if(column.endsWith("PK")) { 
      return "id"; 
     } else { 
      return super.columnToPropertyName(table, column); 
     } 
    } 
} 

В вашем случае, вы можете реализовать

public String tableToClassName(TableIdentifier tableIdentifier) { 
    return delegate==null?null:delegate.tableToClassName(tableIdentifier); 
} 

к "depluralize" классы генерируются из имен таблиц (ADDRESSES =>Address).

Но, к сожалению, в среде NetBeans Hibernate Reverse Engineering Wizardнедают возможность выбрать обратную инженерную стратегию, если пользователь случится иметь любой (это повышение запланировано на NetBeans 7.0, если позволяет время).

Итак, если вы хотите использовать пользовательскую стратегию, вам придется использовать Ant или Maven. В настоящее время это невозможно для NetBeans.