Hibernate中的ManyToMany映射引用错误(由api生成的表名)表Spring Boot

Posted

技术标签:

【中文标题】Hibernate中的ManyToMany映射引用错误(由api生成的表名)表Spring Boot【英文标题】:ManyToMany Mapping In Hibernate Refers Wrong(Table name generated By api) Table Spring Boot 【发布时间】:2018-01-14 13:29:24 【问题描述】:

Hibernate @ManyToMany 映射生成不同的 Join Table 名称并尝试从中获取数据,但它不存在。

@JoinTable 实体映射中定义为“productcolumn_customfields”的连接表,但它需要一个不同的表并抛出以下内容

错误:

表“product_columns_details_customviews”不存在

使用的技术有: Spring-boot、Spring-data-Jpa、Hibernate、mysql

完全错误是:

org.springframework.dao.InvalidDataAccessResourceUsageException: 可以 不提取结果集; SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException:无法提取 结果集在 org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:261) 在 org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:244) 在 org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:488) 在 org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59) 在 org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213) 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:147) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:133) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:57) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213) 在 com.sun.proxy.$Proxy147.save(未知来源) xxxx.ViewServiceImpl.insertViewNameService(ViewServiceImpl.java:564) 在 xxxx.ViewServiceImpl$$FastClassBySpringCGLIB$$50dd8d1c.invoke() 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629) 在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618) 在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) 在 xxxx.ViewServiceImpl$$EnhancerBySpringCGLIB$$1737579b.insertViewNameService() 在 xxxx.ViewController.insertViewNameController(ViewController.java:138) 在 xxxx.ViewController$$FastClassBySpringCGLIB$$d262cb92.invoke() 在 org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 在 org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 在 org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:629) 在 org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:618) 在 org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673) 在 xxxx.ViewController$$EnhancerBySpringCGLIB$$9d8d1205.insertViewNameController() 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) 在 org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) 在 org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827) 在 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738) 在 org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) 在 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) 在 org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) 在 org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) 在 org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:661) 在 org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:742) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilterInternal(BasicAuthenticationFilter.java:215) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:105) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745) 引起: org.hibernate.exception.SQLGrammarException:无法提取 结果集在 org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) 在 org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) 在 org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95) 在 org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79) 在 org.hibernate.loader.Loader.getResultSet(Loader.java:2117) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900) 在 org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876) 在 org.hibernate.loader.Loader.doQuery(Loader.java:919) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:306) 在 org.hibernate.loader.Loader.loadEntity(Loader.java:2204) 在 org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:60) 在 org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:50) 在 org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:4019) 在 org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:508) 在 org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:478) 在 org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:219) 在 org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:278) 在 org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121) 在 org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:89) 在 org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1129) 在 org.hibernate.internal.SessionImpl.access $2600(SessionImpl.java:164) 在 org.hibernate.internal.SessionImpl$IdentifierLoadAccessImpl.load(SessionImpl.java:2696) 在 org.hibernate.internal.SessionImpl.get(SessionImpl.java:980) 在 org.hibernate.event.internal.DefaultMergeEventListener.entityIsDetached(DefaultMergeEventListener.java:290) 在 org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:170) 在 org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:850) 在 org.hibernate.internal.SessionImpl.merge(SessionImpl.java:832) 在 org.hibernate.engine.spi.CascadingActions$6.cascade(CascadingActions.java:260) 在 org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:398) 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323) 在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) 在 org.hibernate.engine.internal.Cascade.cascadeCollectionElements(Cascade.java:431) 在 org.hibernate.engine.internal.Cascade.cascadeCollection(Cascade.java:363) 在 org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:326) 在 org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:162) 在 org.hibernate.engine.internal.Cascade.cascade(Cascade.java:111) 在 org.hibernate.event.internal.DefaultMergeEventListener.cascadeOnMerge(DefaultMergeEventListener.java:468) 在 org.hibernate.event.internal.DefaultMergeEventListener.entityIsPersistent(DefaultMergeEventListener.java:202) 在 org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:176) 在 org.hibernate.event.internal.DefaultMergeEventListener.onMerge(DefaultMergeEventListener.java:69) 在 org.hibernate.internal.SessionImpl.fireMerge(SessionImpl.java:840) 在 org.hibernate.internal.SessionImpl.merge(SessionImpl.java:822) 在 org.hibernate.internal.SessionImpl.merge(SessionImpl.java:827) 在 org.hibernate.jpa.spi.AbstractEntityManagerImpl.merge(AbstractEntityManagerImpl.java:1161) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:347) 在 com.sun.proxy.$Proxy97.merge(未知来源) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:298) 在 com.sun.proxy.$Proxy97.merge(未知来源) org.springframework.data.jpa.repository.support.SimpleJpaRepository.save(SimpleJpaRepository.java:511) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:504) 在 org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:489) 在 org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:461) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:56) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) 在 org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282) 在 org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) 在 org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 在 org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ...省略了139个常见框架原因: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表 'xxx.product_columns_details_customviews' 不存在于 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 在

自定义视图实体是:

@Entity
@Table(name = "custom_views")
public class CustomViews implements Serializable

    /**
     * 
     */
    private static final long serialVersionUID = -7325379776348403853L;

    @Id
    @GenericGenerator(name="generator", strategy="increment")
    @GeneratedValue(generator="generator")
    @Column(name="custom_id")
    private Long customId;

    @Column(name="view_name")
    private String viewName;

    @ManyToOne
    @JoinColumn(name="user_id")
    private User user;

    @ManyToMany(cascade = CascadeType.MERGE, CascadeType.REMOVE,fetch=FetchType.LAZY)
    @JoinTable(name = "productcolumn_customfields", 
        joinColumns =  @JoinColumn(name = "cv_id") ,
        inverseJoinColumns =  @JoinColumn(name = "pcd_id",nullable = false, updatable = false) )
    private List<ProductColumnsDetailsCV> productColumnsDetails;

    public CustomViews()
        super();
    

    public CustomViews(Long customId, String viewName, User user, List<ProductColumnsDetailsCV> productColumnsDetails) 
        super();
        this.customId = customId;
        this.viewName = viewName;
        this.user = user;
        this.productColumnsDetails = productColumnsDetails;
    

    /**
     * @return the customId
     */
    public Long getCustomId() 
        return customId;
    

    /**
     * @param customId the customId to set
     */
    public void setCustomId(Long customId) 
        this.customId = customId;
    

    /**
     * @return the viewName
     */
    public String getViewName() 
        return viewName;
    

    /**
     * @param viewName the viewName to set
     */
    public void setViewName(String viewName) 
        this.viewName = viewName;
    

    /**
     * @return the user
     */
    public User getUser() 
        return user;
    

    /**
     * @param user the user to set
     */
    public void setUser(User user) 
        this.user = user;
    

    /**
     * @return the productColumnsDetails
     */
    public List<ProductColumnsDetailsCV> getProductColumnsDetails() 
        return productColumnsDetails;
    

    /**
     * @param productColumnsDetails the productColumnsDetails to set
     */
    public void setProductColumnsDetails(List<ProductColumnsDetailsCV> productColumnsDetails) 
        this.productColumnsDetails = productColumnsDetails;
    


产品栏目详情实体:

@Entity
@Table(name = "product_columns_details")
public class ProductColumnsDetailsCV implements Serializable

    private static final long serialVersionUID = 7685428544522743567L;

    @Id
    @GenericGenerator(name="generator", strategy="increment")
    @GeneratedValue(generator="generator")
    @Column(name="pid")
    private Long pid;

    @Column(name="display_name")
    private String displayName;

    @Column(name="column_name")
    private String columnName;

    @Column(name="actual_name")
    private String actualName;

    @Column(name="type")
    private String type;

    @Column(name="is_pk")
    private boolean isPk;

    @Column(name="is_sortable")
    private boolean isSortable;

    @Column(name="order_")
    private int order;

    @Column(name="is_popup")
    private boolean isPopUp;


    @ManyToMany(cascade = CascadeType.MERGE, CascadeType.REMOVE)
    @JoinColumn(name="productColumnsDetails")
    private List<CustomViews> customviews;


    public ProductColumnsDetailsCV() 
        super();
    


    /**
     * @param pid
     * @param displayName
     * @param columnName
     * @param actualName
     * @param customFilter
     */
    public ProductColumnsDetailsCV(Long pid, String displayName, String columnName, String actualName) 

        this.pid = pid;
        this.displayName = displayName;
        this.columnName = columnName;
        this.actualName = actualName;
    

    //Getters & Setter


表格:

CREATE TABLE `productcolumn_customfields` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `pcd_id` bigint(20) DEFAULT NULL,
  `cv_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id_pid_productcoldetails_idx` (`pcd_id`),
  KEY `id_cvid_customviews_idx` (`cv_id`),
  CONSTRAINT `fk_pcd_id_productcolumndet` FOREIGN KEY (`pcd_id`) REFERENCES `product_columns_details` (`pid`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `id_cvid_customviews` FOREIGN KEY (`cv_id`) REFERENCES `custom_views` (`custom_id`) ON DELETE CASCADE ON UPDATE CASCADE

CREATE TABLE `product_columns_details` (
  `pid` bigint(20) NOT NULL AUTO_INCREMENT,
  `display_name` varchar(255) DEFAULT NULL,
  `column_name` varchar(255) DEFAULT NULL,
  `actual_name` varchar(255) DEFAULT NULL,
  `type` varchar(25) NOT NULL DEFAULT 'String',
  `is_pk` bit(1) NOT NULL DEFAULT b'0',
  `is_sortable` bit(1) NOT NULL DEFAULT b'0',
  `order_` int(11) NOT NULL DEFAULT '0',
  `is_popup` bit(1) NOT NULL DEFAULT b'0',
  PRIMARY KEY (`pid`),
  UNIQUE KEY `actual_name_UNIQUE` (`actual_name`)

CREATE TABLE `custom_views` (
  `custom_id` bigint(30) NOT NULL AUTO_INCREMENT,
  `view_name` varchar(255) NOT NULL,
  `user_id` bigint(20) NOT NULL,
  PRIMARY KEY (`custom_id`),
  KEY `custom_views_ibfk_1` (`user_id`),
  CONSTRAINT `custom_views_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user`enter code here`_id`) ON DELETE CASCADE ON UPDATE CASCADE
)

【问题讨论】:

【参考方案1】:

这里发生了问题,因为双方(在实体中)都强制休眠执行many-to-many 映射,这是错误的。 这是休眠假设连接表名称是 product_columns_details_customviews 不存在并且不从配置中获取表名称(在实体 CustomViews 的注释中)即 productcolumn_customfields

现有代码:

@Entity
@Table(name = "product_columns_details")
public class ProductColumnsDetailsCV implements Serializable
...
...
...
@ManyToMany(cascade = CascadeType.MERGE, CascadeType.REMOVE)
@JoinColumn(name="productColumnsDetails")
private List<CustomViews> customviews;

@Entity
@Table(name = "custom_views")
public class CustomViews implements Serializable
...
...
...
@ManyToMany(cascade = CascadeType.MERGE, CascadeType.REMOVE,fetch=FetchType.LAZY)
@JoinTable(name = "productcolumn_customfields", 
    joinColumns =  @JoinColumn(name = "cv_id") ,
    inverseJoinColumns =  @JoinColumn(name = "pcd_id",nullable = false, updatable = false) )
private List<ProductColumnsDetailsCV> productColumnsDetails;

唯一需要的修正是:

需要更改ProductColumnsDetailsCV中的实体映射,如下所示。

@ManyToMany(cascade = CascadeType.MERGE, CascadeType.REMOVE, mappedBy = "productColumnsDetails")
private List<CustomViews> customviews;

删除了注释 @JoinColumn(name="productColumnsDetails")

@ManyToMany中添加属性ma​​ppedBy

【讨论】:

【参考方案2】:

您在一侧指定 joinColumn 并在另一侧指定 joinTable,您需要从 ProductColumnsDetailsCV 中删除 joinColumn

 @ManyToMany(cascade = CascadeType.MERGE, CascadeType.REMOVE)
  private List<CustomViews> customviews;

【讨论】:

即使在删除 joinColumn 后得到相同的结果 为什么不让 JPA 创建你的表? JPA 不应在 prod 环境中创建表 @TheSprinter 请尝试删除连接表名称之前和之后的 '**' name = "productcolumn_customfields", ,也是创建连接表的第一个查询,使其成为最后一个查询而不是首先

以上是关于Hibernate中的ManyToMany映射引用错误(由api生成的表名)表Spring Boot的主要内容,如果未能解决你的问题,请参考以下文章

是否可以指定使用 Hibernate 将 id 自动增量非空主键设置为 @ManyToMany 关系映射?

这是 ManyToMany JPA/Hibernate 关系还是有另一种映射方式?

Hibernate:@ManyToMany 关系中对象集的传递持久性

如何在两个外键上设置 Hibernate @ManyToMany 与级联的关联?

Hibernate学习笔记 --- 创建基于中间关联表的多对多映射关系

ManyToMany 属性的 SELECT 上的 JPQL Hibernate SQLException