2013-08-14 3 views
0

Maven을 사용하는 응용 프로그램에서 Spring 3 및 Hibernate 4를 사용 중입니다. 최대 절전 모드 매핑으로 인해 일부 문제가 발생하여 작업 중입니다. 하지만 지금은 붙어있어 해결책을 찾을 수 없습니다. 내가 뭔가 잘못하고 있다면 저를 바로 잡으십시오. 내 엔티티 클래스가 난 내 NamedQuery을 쓴 곳이다 -org.hibernate.HibernateException : 누락 된 열

@Entity 

     @NamedQuery(
      name = "findAllProduct", 
      query = "from PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION pvpo" 
      +" INNER JOIN pvpo.pcvId pcv" 
      +" INNER JOIN pcv.productCatalogId pc" 
      +" INNER JOIN pc.productCatalogId id" 
      +" INNER JOIN pvpo.pincode pin" 
      +" where id = :id" 
      ) 


     public class PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION extends baseEntity.Entity { 

      @Id 
      @GeneratedValue(strategy=GenerationType.AUTO) 
      private int id; 

      @Column(name="Payment_Id") 
      @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="id") 
      private Set<Product_Catalog_Vendor> pcvId; 


      @Column(name="pincode_id") 
      @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="pincode_id") 
      private Set<Pincodes> pincode;   


     @Column(name = "PAYMENT_OPTIONS") 
      @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,mappedBy="paymentOptions") 
      private Set<Payment_Options> paymentOptions; 
     //setter getter 
     } 

내 Payment_Options 클래스입니다 : - 데이터베이스에

@Entity 
@Table(name="payement_options")  
public class Payment_Options extends baseEntity.Entity { 

    @Id 
    @JoinColumn(name="PAYMENT_OPTIONS") 
    private int paymentOptions; 

    @Column(name="Description") 
    private String description; 
//Setter Getter 
} 

PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION 및 PAYMENT_OPTIONS 테이블 : -

CREATE TABLE PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION (
     ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
     Payment_Id INTEGER UNSIGNED NOT NULL , 
     PINCODE_ID INTEGER UNSIGNED NOT NULL , 
     PAYMENT_OPTIONS INTEGER UNSIGNED NOT NULL , 
    PRIMARY KEY(ID,Payment_Id, PINCODE_ID) , 
    INDEX PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION_FKIndex1(PAYMENT_OPTIONS), 
    INDEX PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION_FKIndex2(Payment_Id) , 
    INDEX PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION_FKIndex3(PINCODE_ID), 
     FOREIGN KEY(PAYMENT_OPTIONS) 
     REFERENCES PAYEMENT_OPTIONS(PAYMENT_OPTIONS) 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION, 
     FOREIGN KEY(Payment_Id) 
     REFERENCES PRODUCT_CATALOG_VENDOR(Id) 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION, 
     FOREIGN KEY(PINCODE_ID) 
     REFERENCES PINCODES(PINCODE_ID) 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION); 

... 

    CREATE TABLE PAYEMENT_OPTIONS (
     PAYMENT_OPTIONS INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, 
     Description VARCHAR(500) NULL , 
    PRIMARY KEY(PAYMENT_OPTIONS)); 

내가 무엇입니까 배포시 오류가 발생했습니다. 아래에 몇 가지 해결책을 제공하십시오. 감사!

18:12:26,614 INFO [org.springframework.beans.factory.support.DefaultListableBeanFactory] (MSC service thread 1-3) Destroying singletons in org.s[email protected]6e677ea2: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.internalPersistenceAnnotationProcessor,productController,usermanagementHibernateProperties,jspViewResolver,usermanagementSessionFactory,usermanagementDataSource,city,state,country,pincodes,notification,notification_types,transactions,address,user_master,notification_channels,notification_time,prefilled_response,payment_options,catagory,vendor,requester,requirement_type,discount_offer_type,discount_offers,requirements,product_catalog,product_catalog_vendor,product_vendor_payment_option_location,baseDaoImpl,productDAO,productService,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,transactionManager,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy 
18:12:26,624 SEVERE [org.springframework.web.servlet.DispatcherServlet] (MSC service thread 1-3) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ecom.data.access.transaction.ProductService com.ecom.data.access.controller.ProductController.productService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ecom.data.access.product.ProductDAO com.ecom.data.access.transaction.ProductServiceImpl.productDAO; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productDAO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.ecom.data.access.product.ProductDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usermanagementSessionFactory' defined in class path resource [applicationContext-usermanagement-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing column: paymentOptions in 2402.payement_options 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:288) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1122) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:522) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:626) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) [spring-context-3.2.2.RELEASE.jar:] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) [spring-context-3.2.2.RELEASE.jar:] 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:651) [spring-webmvc-3.2.2.RELEASE.jar:] 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:599) [spring-webmvc-3.2.2.RELEASE.jar:] 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:665) [spring-webmvc-3.2.2.RELEASE.jar:] 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:518) [spring-webmvc-3.2.2.RELEASE.jar:] 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:459) [spring-webmvc-3.2.2.RELEASE.jar:] 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136) [spring-webmvc-3.2.2.RELEASE.jar:] 
    at javax.servlet.GenericServlet.init(GenericServlet.java:242) [jboss-servlet-api_3.0_spec-1.0.0.Final.jar:1.0.0.Final] 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1202) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1102) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3631) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:3844) [jbossweb-7.0.1.Final.jar:7.0.2.Final] 
    at org.jboss.as.web.deployment.WebDeploymentService.start(WebDeploymentService.java:70) [jboss-as-web-7.0.2.Final.jar:7.0.2.Final] 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1824) 
    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1759) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [:1.6.0_43] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [:1.6.0_43] 
    at java.lang.Thread.run(Thread.java:662) [:1.6.0_43] 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ecom.data.access.transaction.ProductService com.ecom.data.access.controller.ProductController.productService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ecom.data.access.product.ProductDAO com.ecom.data.access.transaction.ProductServiceImpl.productDAO; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productDAO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.ecom.data.access.product.ProductDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'usermanagementSessionFactory' defined in class path resource [applicationContext-usermanagement-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Missing column: paymentOptions in 2402.payement_options 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:514) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) [spring-beans-3.2.2.RELEASE.jar:] 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285) [spring-beans-3.2.2.RELEASE.jar:] 
    ... 27 more 

답변

1

Entitymapping과 일치하도록 데이터베이스 테이블을 만들어야합니다.

첫 번째 문제는 Payment_Options 테이블의 id 열의 이름이 PAYMENT_OPTIONS 인 것입니다. 그러나 Payment_Options 클래스의 필드 이름은 paymentOptions이며 @Column 주석이 없습니다. 일치하지 않습니다.

그래서 필드에 @Column(name="PAYMENT_OPTIONS")을 추가

@Id 
@Column(name="PAYMENT_OPTIONS") 
@JoinColumn(name="PAYMENT_OPTIONS") //I have no idea what you want to do with this annotation 
private int paymentOptions; 

하지만 진짜 문제는 Payment_OptionsPRODUCT_VENDOR_PAYMENT_OPTION_LOCATION 사이의 관계의 당신의 매핑은 매우 이상한 것입니다.

우선 내가 잘못 생각한 것 같습니다. 이없는 PaymentOption입니다.

내가 추천 :

public class PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION 
    ... 

    @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER, mappedBy="pvpol") 
    private Set<Payment_Options> paymentOptions;  
    ... 
} 

public class PaymentOption ... 
    ... 
    @ManyToOne 
    PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION pvpol; 
    ... 
} 
+0

주셔서 감사합니다 되돌리기 내 application.properties에서

검증 = 파일을

spring.jpa.hibernate.ddl - 자동 : 내 경우에는 내가 속성을 제거 로했다 . 당신은 당신의 suggesion에 맞습니다. 그러나 나는 모든 엔터티 클래스 나 DB 테이블에 새로운 속성을 만들고 싶지 않습니다. 이미 데이터베이스에 테이블을 만들었습니다. pls는 PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION 테이블에 대해 편집 된 질문을 참조합니다. 여기에는 3 개의 외래 키와 하나의 복합 키가 있습니다. 나는 Payment_Options 클래스의 외래 키를 joincolumn을 사용하여 참조하고 있습니다. 마찬가지로 pincodes 및 Product_Catalog_Vendor 키를 참조하고 있는데, 이는 정상적으로 작동합니다. 그래서 Payment_Options 클래스에서 문제가 발생합니다.이 매핑과 관련된 문제가 무엇인지 말해주세요. ? – AskSharma

+0

문제는 PRODUCT_VENDOR_PAYMENT_OPTION_LOCATION 테이블이 아니며 문제는 Payment_Option 테이블입니다. 그러나 당신은 그 구조를 게시하지 않았습니다! – Ralph

+0

위의 Payment_Options 테이블을 찾아서 알려주세요. – AskSharma

0

나는 비슷한 문제가 있었다.

+1

이것은 유효성 검사를 해제하여 문제를 숨기 만하지만 문제가 해결되지는 않습니다. – Michal

관련 문제