Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JPA+;休息_Java_Jpa - Fatal编程技术网

Java 如何在JPA+;休息

Java 如何在JPA+;休息,java,jpa,Java,Jpa,我有以下JPA实体 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预订={ 电子邮件:localStorage.

我有以下JPA实体

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预订={
电子邮件:localStorage.getItem(“电子邮件”),…

上面是我从JS中填充bookForUser对象的JSON代码。我正在使用JAVA+REST作为后端。但是在成功路由REST调用之后 我有个例外

SEVERE: Servlet.service() for servlet [com.RRS.config.RRSConfig] in context with path [/RRS_2] threw exception org.glassfish.jersey.server.ContainerException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "e_mail" at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@178546ce; line: 1, column: 12] (through reference chain: com.RRS.bean.Reservation["e_mail"])] with root cause com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "e_mail" (class clasName), not marked as ignorable at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@178546ce; line: 1, column: 12] at  com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:51) at com.fasterxml.jackson.databind.DeserializationContext.reportUnknownProperty(DeserializationContext.java:839)
    at com.fasterxml.jackson.databind.deser.std.StdDeserializer.handleUnknownProperty(StdDeserializer.java:1045)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.handleUnknownProperty(BeanDeserializerBase.java:1352)
    at 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.jackson.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)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:74)
    at 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)
    at org.glassfish.jersey.server.ContainerRequest.readEntity(ContainerRequest.java:271)
    at org.glassfish.jersey.server.internal.inject.EntityParamValueFactoryProvider$EntityValueFactory.provide(EntityParamValueFactoryProvider.java:96)
    at org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide(ParamValueFactoryWithSource.java:71)
    at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:94)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:127)
    at 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)
    at 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)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(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.ServletContainer.service(ServletContainer.java:223)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(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)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
电子邮件是实体用户的主键。表名与类名User相同 由于字符串电子邮件不是保存主键的好方法,我计划将其更改为int userId。但问题对我来说仍然是一样的

我想要的是

class User : primary key=email, some other params
class BookForUser : primary key = id, some other params, foreign key = email
我所理解的是BookForUser并没有一个完整的用户对象,我不想要它

这种声明外键的方式正确吗?(我想要1个用户=许多保留)


如何将此电子邮件属性传递给我的Java代码?

首先,将电子邮件地址等字符串作为主要属性不是一个好主意。您可以使用的是:

将用户的主键设置为整数,并为电子邮件设置一个唯一的字段。这允许您使用整数主键(更易于使用和引用),并避免电子邮件地址重复

另一种方法是为用户创建一个类,为书籍创建一个类。 如果它们之间没有链接,那么现在就不同了。然后,您将拥有第三个类,该类将使用它们在userreservedbook中的主键连接它们

示例:
Class UserReservedBooks
{
idReservation
(此类的主键),
idUser
->用户的主键,
idBook
->书籍的主键,…保留的其他特定参数,如保留日期等)

这种方法的优点是:

  • 1个用户可以有多个预订
  • 它将允许您(如果您愿意)查看哪些用户保留了特定的书籍
  • 您还可以让用户一次预订多本书
  • 一本书可以由多人预订
  • 您的用户将具有唯一的电子邮件地址
  • 你可以避免书的重复

  • 首先,将诸如电子邮件地址之类的字符串作为主字符串不是一个好主意。您可以拥有的是:

    将用户的主键设置为整数,并为电子邮件设置一个唯一的字段。这允许您使用整数主键(更易于使用和引用),并避免电子邮件地址重复

    另一种方法是为用户创建一个类,为书籍创建一个类。 如果它们之间没有链接,那么现在就不同了。然后,您将拥有第三个类,该类将使用它们在userreservedbook中的主键连接它们

    示例:
    Class UserReservedBooks
    {
    idReservation
    (此类的主键),
    idUser
    ->用户的主键,
    idBook
    ->书籍的主键,…保留的其他特定参数,如保留日期等)

    这种方法的优点是:

  • 1个用户可以有多个预订
  • 它将允许您(如果您愿意)查看哪些用户保留了特定的书籍
  • 您还可以让用户一次预订多本书
  • 一本书可以由多人预订
  • 您的用户将具有唯一的电子邮件地址
  • 你可以避免书的重复

  • 电子邮件ID可能无法有效地保存外键引用。请仔细分析您的问题。用户类在哪里?什么是“跟踪JPA实体”类名?电子邮件不是用户的Id吗?异常+STACKTRACE在哪里?如上所述,详细说明您的问题,因为您发布的内容无法理解。我猜您得到的是一个JSON到Java的映射错误。如果booking是您在文章中提到的实体,那么您的JSON应该类似于
    booking={User:{e\u-mail:localStorage.getItem(“email”),…},…}
    我得到了电子邮件的正确输出:localStorage.getItem(“email”)因此,在JSON中有一个名为
    e_-mail
    的字符串类型字段。您正试图将此JSON解组到哪个Java类?如果该类是
    BookForUser
    ,为什么您希望它工作?该类中是否有名为
    e_-mail
    的字符串类型属性?不,没有。创建一个与y匹配的类您可以从浏览器以JSON的形式发送。然后,使用Java代码,在JPA API的帮助下,将该类的实例转换为BookForUser。并遵守Java/JavaScript约定:字段中没有下划线。电子邮件ID可能无法有效地保留外键引用。请仔细编辑您的问题。用户类在哪里?是什么?”下面的JPA实体“类名”是电子邮件不是用户的Id?异常+STACKTRACE在哪里?如上所述,详细说明您的问题,因为您发布的内容无法理解。我猜您得到的是一个JSON到Java的映射错误。如果booking是您在帖子中提到的实体,那么您的JSON应该类似于
    booking={User:{e_-mail:localStorage.getItem(“电子邮件”),…},…}}
    我正在为e_-mail:localStorage.getItem(“电子邮件”)获得正确的输出因此,在JSON中有一个名为
    e_-mail
    的字符串类型字段。您正试图将此JSON解组到哪个Java类?如果该类是
    BookForUser
    ,为什么您希望它工作?该类中是否有名为
    e_-mail
    的字符串类型属性?不,没有。创建一个与y匹配的类您从浏览器以JSON的形式发送。然后,使用Java代码,在JPA API的帮助下,将该类的实例转换为BookForUser。并遵守Java/JavaScript约定:字段中无下划线。