2016-08-29 2 views
0

. Здесь много полезных ответов, и я надеюсь, что вы тоже можете помочь мне с моей проблемой.JPA Eclipselink - Multitenant - TenantDiscriminatorColumn as primaryKey - не может выполнить запрос POST.

Сценарий:

Я создал JaveEE динамический веб-проект с сервлета. Проект приложения, управляемый приложениями. Нравится это ->https://help.hana.ondemand.com/help/frameset.htm?e4aeacd2bb5710148ee99255136d96a5.html

База данных работает на платформе Hana Cloud с пробной учетной записью.

Я использовал @IdClass аннотацию для составного первичного ключа и промаркирован ПгвЬЫат и ЬавЬЫат как Id. Я аннотировал класс с @Multitenant и @TenantDiscriminatorColumn и мой первичный ключ имеет 3 значения -> tenant_id, имя и фамилию.

Я также определил некоторые службы OData с JPAEdmExtension для доступа к данным с запросом OData.

И вот теперь моя проблема: когда я запускаю запросы GET с хроматами почтальона. он работает хорошо, но когда я пытаюсь выполнить POST-запросы, в моей базе данных нет записи, хотя почтальон говорит 201: created

Я полагаю, почтальон не может обрабатывать столбец tenant_id, который является арендаторомDiscriminatorColumn и не отображается в http-запросах?

Но как я могу решить эту проблему? Мне нужно получить доступ к данным с помощью OData, а также скрывать tenant_id.

благодарит за ответ.

Код Attachment:

Класс Person:

@Entity 
@IdClass(PersonPK.class) 
@Table(name = "PERSON") 
@Multitenant 
@TenantDiscriminatorColumn(length = 36, primaryKey = true) 
@NamedQuery(name = "AllPersons", query = "select p from Person p") 
public class Person implements Serializable { 

@Id 
@Column(name = "FIRSTNAME") 
private String firstname; 

@Id 
@Column(name = "LASTNAME") 
private String lastname; 

//...getter setter constructor 
} 

Класс PersonPK:

public class PersonPK implements Serializable { 

private String firstname; 
private String lastname; 

public PersonPK() { } 

public PersonPK(String firstname, String lastname) { 
    this.firstname = firstname; 
    this.lastname = lastname; 
} 

//..getter + hashcode/equals override 
} 

Класс PersonProcessing который обеспечивает сущности модели данных:

public class PersonProcessing implements JPAEdmExtension { 

@Override 
public void extendJPAEdmSchema(JPAEdmSchemaView view) { 
    Schema edmSchema = view.getEdmSchema(); 
    List<EntityType> entityTypes= edmSchema.getEntityTypes(); 
    for (Iterator<EntityType> iterator = entityTypes.iterator(); iterator.hasNext();) { 
     EntityType et = (EntityType) iterator.next(); 
     if (et.getName().equals("Person")) { 
      List<Property> props = et.getProperties(); 
      } 
     } 
    } 
}  
} 

Tenantid обеспечивается исх ресурсов в web.xml

<resource-ref> 
<res-ref-name>TenantContext</res-ref-name> 
<res-type>com.sap.cloud.account.TenantContext</res-type> 
</resource-ref> 

Get и Post запросы с почтальоном

//..hanatrial.../personApplication/odata.svc/Persons 
+0

Почему бы не начать с отладки вашего кода настойчивости? и посмотрите журнал регистрации JPA. –

ответ

0

Хорошо, я нашел ответ. У меня была проблема с классом реализации JPA Procecssor. Я не установил EntityManager с помощью TenantContext String.