У меня после JPA сущностикак установить внешний ключ в JPA + REST
my JPA entity :: BookForUser
@Id
private int id;
@ManyToOne
@JoinColumn(name="e_mail")
private User user;// I do not want User object in the table,
//I want a string e_mail to be foreign key in my entity table
var booking = { e_mail: localStorage.getItem("email"),...
Выше мой JSON код для заполнения объекта bookForUser от JS. Я использую JAVA + REST для задней части. но после того, как успешно маршрутизации вызова REST я получаю исключение
СИЛЬНЫЙ: Servlet.service() для сервлета [com.RRS.config.RRSConfig] в контексте с пути [/ RRS_2] бросил исключение org.glassfish .jersey.server.ContainerException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: нераспознанное поле «e_mail» в [Источник: org.glassfish.jersey.me[email protected]178546ce; строка: 1, столбец: 12] (через цепочку ссылок: com.RRS.bean.Reservation ["e_mail"])] с основной причиной com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: нераспознанное поле "e_mail" (класс clasName), не отмеченные как неосведомленные в [Источник: org.glassfish.jersey.me[email protected]178546ce; строка: 1, столбец: 12] в com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from (UnrecognizedPropertyException.java:51) в com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty (DeserializationContext.java:839) at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty (StdDeserializer.java:1045) на com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty (BeanDeserializerBase.java:1352) на com.fasterxml. jackson.databind.deser.BeanDeserializerBase.handleUnknownVanilla (BeanDeserializerBase.java:1330) at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize (BeanDeserializer.java:264) at com.fasterxml.jackson.databind.deser. BeanDeserializer.deserialize (BeanDeserializer.java:125) at com.fasterxml.jac kson.databind.ObjectReader._bind (ObjectReader.java:1470) at com.fasterxml.jackson.databind.ObjectReader.readValue (ObjectReader.java:912) at com.fasterxml.jackson.jaxrs.base.ProviderBase.readFrom (ProviderBase.java:811) в org.glassfish.jersey.message.internal.ReaderInterceptorExecutor $ TerminalReaderInterceptor.invokeReadFrom (ReaderInterceptorExecutor.java:256) в org.glassfish.jersey.message.internal.ReaderInterceptorExecutor $ TerminalReaderInterceptor.aroundReadFrom (ReaderInterceptorExecutor. Java: 235) на org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed (ReaderInterceptorExecutor.java:155) на org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom (MappableExceptionWrapperInterceptor.java:74) на org.glassfish .jersey.message.internal.ReaderInterceptorExecutor.proceed (ReaderInterceptorExecutor.java:155) at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom (MessageBodyFactory.java:1085) at org.glassfish.jersey.message.internal .InboundMessageContext.readEntity (InboundMessageContext.java:874) на org.glassfish.jersey.server.ContainerRequest.readEntity (ContainerRequest.java:271) в org.glassfish.jersey.server.internal.inject.EntityParamValueFactoryProvider $ EntityValueFactory.provide (EntityParamValueFactoryProvider.java:96) на org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide (ParamValueFactoryWithSource.java:71) в org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues (ParameterValueHelper .java: 94) на или g.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ AbstractMethodParamInvoker.getParamValues (JavaResourceMethodDispatcherProvider.java:127) в org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ TypeOutInvoker.doDispatch (JavaResourceMethodDispatcherProvider.java:205) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch (AbstractJavaResourceMethodDispatcher.java:99) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke (ResourceMethodInvoker.java:389) на org.glassfish.jersey. server.model.ResourceMethodInvoker.apply (ResourceMethodInvoker.java:347) at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply (ResourceMethodInvoker.java:102) at org.glassfish.jersey.server.ServerRuntime $ 2.run (ServerRuntime.java:326) at org.glassfish.jersey.internal.Errors $ 1.call (Errors.java:271) at org.glassfish.jersey.internal.Errors $ 1.call (Errors.java:267) на org.glassfish.jersey.internal.Errors.process (Errors.java:315) at org.glassfish.jersey.internal.Errors.proce ss (Errors.java:297) at org.glassfish.jersey.internal.Errors.process (Errors.java:267) at org.glassfish.jersey.process.internal.RequestScope.runInScope (RequestScope.java:317) at org.glassfish.jersey.server.ServerRuntime.process (ServerRuntime.java:305) at org.glassfish.jersey.server.ApplicationHandler.handle (ApplicationHandler.java:1154) at org.glassfish.jersey.servlet. WebComponent.serviceImpl (WebComponent.java:471) at org.glassfish.jersey.servlet.WebComponent.service (WebComponent.java:425) at org.glassfish.jersey.servlet.ServletContainer.service (ServletContainer.java:383) at org.glassfish.jersey.servlet.ServletContainer.service (ServletContainer.java:336) at org.glassfish.jersey.servlet.ServletCon tainer.service (ServletContainer.java:223) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.tomcat.websocket.server.WsFilter.doFilter (WsFilter.java:52) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:241) на org.apache.catalina. core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) на org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve.java:220) на org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java: 122) at org.apache.catalina.authenticator.AuthenticatorBase.inv окэ (AuthenticatorBase.java:501) на org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:171) на org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:103) на org.apache.catalina.valves.AccessLogValve.invoke (AccessLogValve.java:950) по адресу org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter. службы (CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:314) на java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) на java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) на org.apache.tomcat.util.threads. TaskThread $ WrappingRunnable.run (TaskThread.java:61) в java.lang.Thread.run (Thread.java:745)
e_mail является первичным ключом для объекта пользователя. Имя таблицы совпадает с именем класса user Поскольку электронная почта String не является хорошим способом сохранить первичный ключ, я планирую изменить его на int userId. Но проблема останется такой же для меня.
что я хочу
class User : primary key=email, some other params
class BookForUser : primary key = id, some other params, foreign key = email
То, что я понял, это BookForUser не имеют полного объекта пользователя в нем. Я не хочу этого.
Этот способ определения внешнего ключа правильный? (Я хочу 1 пользователь = много резервирования)
Как передать этот атрибут электронной почты в код Java?
Идентификатор электронной почты не может эффективно сохранять ссылку на внешний ключ. Хорошо обдумайте свой вопрос. – vels4j
Где находится пользовательский класс? Что такое имя класса после имени JPA? Является ли электронная почта не идентификатором пользователя? Где исключение + STACKTRACE? Как сказано выше, уточните свой вопрос, так как то, что вы публикуете, непонятно –
Я предполагаю, что вы получаете ошибку отображения JSON в Java. Если бронирование - это объект, о котором вы упоминали в сообщении, ваш json должен быть как 'booking = { пользователь: {e_mail: localStorage.getItem (" email "), ...}, ... \t}' – nickmesi