. Здесь много полезных ответов, и я надеюсь, что вы тоже можете помочь мне с моей проблемой.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
Почему бы не начать с отладки вашего кода настойчивости? и посмотрите журнал регистрации JPA. –