Hibernate nullpointer

时间:2017-07-21 13:11:17

标签: java hibernate

我最近创建了一个由Hibernate映射的新子对象,但由于某种原因它破坏了我的hibernate初始化代码,并提供了一个我似乎无法找到的null指针。

private static void init()
{
    final StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure() // configures settings from hibernate.cfg.xml
                                                                                 .build();
    MetadataSources mds = new MetadataSources(registry);
    Metadata md = mds.buildMetadata();
    sessionFactory = md.buildSessionFactory();
    Runtime.getRuntime().addShutdownHook(new Thread(() -> {
        StandardServiceRegistryBuilder.destroy(registry);
    }));
}

我调试了该代码,并在Metadata md = mds.buildMetadata();上抛出了一个nullpointer,但是mds不为null。 stacktrace也指向该行。

因此,我试图保存的对象与一个对象的一对一映射,该对象具有针对新创建的类的一对多映射

最外面的对象:

@Entity
@Table(name = "movie")
public class Movie
{
    @SerializedName("internal_id")
    @Column(name = "movie_id")
    @Id
    public String internalID;
    @SerializedName("image_url")
    @Column(name = "image_url")
    public String imageURL;
    @Column(name = "title")
    public String title;
    @Column(name = "year")
    public int year;
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, mappedBy = "rating")
    public List<Rating> rating = new ArrayList<>();
    @SerializedName("extended_movie")
    @OneToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    @JoinColumn(name = "movie_id")
    public ExtendedMovie extendedMovie;
    @ElementCollection
    @CollectionTable(name = "genre", joinColumns = @JoinColumn(name = "movie_id"))
    @Column(name = "genre")
    public List<String> genre = new ArrayList<>();
}

中间对象:

@Entity
@Table(name = "extended_movie")
public class ExtendedMovie
{
    @Id
    @OneToOne(fetch = FetchType.EAGER)
    @PrimaryKeyJoinColumn
    public Movie parent;

    @Column(name = "description")
    public String description;
    @OneToMany(fetch = FetchType.EAGER, cascade = {CascadeType.ALL}, mappedBy = "starredIn", orphanRemoval = true)
    public List<Cast> cast = new ArrayList<>();
    @SerializedName("poster_url")
    @Column(name = "poster_url")
    public String posterURL;
}

leaf object:

@JsonInclude(JsonInclude.Include.NON_NULL)
@Entity
@Table(name = "cast")
public class Cast implements Serializable
{
    @Id
    @JsonIgnore
    @ManyToOne(fetch = FetchType.EAGER, cascade = {CascadeType.ALL})
    @JoinColumn(name = "movie_id")
    public Movie starredIn;

    @Column(name = "department")
    public String department;

    @Column(name = "job")
    public String job;

    @Column(name = "character")
    public String character;

    @Id
    @Column(name = "name")
    public String name;

    @JsonProperty("profile_url")
    @SerializedName("profile_url")
    @Column(name = "profile_url")
    public String profileURL;
}

我之前从未见过这种行为,所以我不知道从哪里开始,因为除了错误之外,nullpointer没有给我任何额外的信息。

以前有人见过这样的事吗?

堆栈跟踪:

java.lang.NullPointerException
    at org.hibernate.mapping.PersistentClass.createPrimaryKey(PersistentClass.java:363)
    at org.hibernate.cfg.CreateKeySecondPass.doSecondPass(CreateKeySecondPass.java:31)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1621)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1585)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418)
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87)
    at org.hibernate.boot.MetadataSources.buildMetadata(MetadataSources.java:179)
    at se.mulander.cosmos.common.database.jpa.Database.init(Database.java:38)
    at se.mulander.cosmos.common.database.jpa.Database.getObjects(Database.java:151)
    at se.mulander.cosmos.movies.util.Movies.lambda$getRecomendations$7(Movies.java:77)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
    at se.mulander.cosmos.movies.util.Movies.getRecomendations(Movies.java:71)
    at se.mulander.cosmos.movies.business.Movies.getRecomendations(Movies.java:37)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
    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:473)
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at se.mulander.cosmos.common.swagger.ApiOriginFilter.doFilter(ApiOriginFilter.java:20)
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1099)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

0 个答案:

没有答案