2011-02-09 2 views
4

Может ли RequestFactory обрабатывать составные первичные ключи?GWT RequestFactory: как обрабатывать объекты с составными первичными ключами

documentation упоминает, что субъекты должны реализовать getId(); как это должно быть реализовано в случае, когда сущности не имеют одного поля «id», а имеют несколько полей внешнего ключа, которые вместе составляют составной первичный ключ?

ответ

7

В GWT 2.1.1 свойства Id и Version могут быть любого типа, который RequestFactory знает, как транспортировать. В принципе, любой примитивный тип (int), в штучной упаковке (Integer) или любой объект, имеющий связанный с ним тип прокси. Вам не нужно сводить составной идентификатор к String самостоятельно; RF-сантехника может автоматически обрабатывать составные ключи, используя постоянный идентификатор ключа типа объекта или сериализованное состояние ключа типа значения.

Используя ранее размещенный пример:

interface Location { 
    public String getDepartment(); 
    public String getDesk(); 
} 

interface Employee { 
    public Location getId(); 
    public int getVersion(); 
} 

@ProxyFor(Location.class) 
interface LocationProxy extends ValueProxy { 
    // ValueProxy means no requirement for getId()/getVersion() 
    String getDepartment(); 
    String getDesk(); 
} 
@ProxyFor(Employee.class) 
interface EmployeeProxy extends EntityProxy { 
    // Use a composite type as an id key 
    LocationProxy getId(); 
    // Version could also be a complex type 
    int getVersion(); 
} 

Если вы не можете уменьшить личность одного getId() собственности на типе домена, вы можете использовать Locator, чтобы обеспечить внешне определенный идентификатор и версию имущество. Например:

@ProxyFor(value = Employee.class, locator = EmployeeLocator.class) 
interface EmployeeProxy {.....} 

class EmployeeLocator extends Locator<Employee, String> { 
    // There are several other methods to implement, too 
    String getId(Employee domainObject) { return domainObject.getDepartment() + " " + domainObject.getDesk(); } 
} 

DevGuide связан с вопросом немного устарели, в отношении RequestFactory changes in 2.1.1

+1

Следует упоминалось, что композиционный ID * * должны быть отображены как ValueProxy (LocationProxy в код выше), и что прокси-сервер должен быть открыт где-то в прокси-серверах (т. е. доступен, когда вы идете по интерфейсам и методам, начиная с GWT.create() d RequestFactory, в приведенном выше примере кода он доступен из getId на EmployeeProxy). –

+0

О, и BTW, версия не должна отображаться на прокси. –

Смежные вопросы