2012-06-04 682 views
5

Tengo algunos problemas para hacer una relación OneToMany en la aplicación Spring + Hibernate 4.1 Estas son mis clases de entidades. Cada registro de USER_ROLE tiene un registro de FK a USER. No puedo encontrar nada útil en Internet.¿Cómo lidiar con el error al aplicar restricciones relacionales de BeanValidation?

@Entity 
@Table(name = "USERS") 
public class User { 

    long id; 
    String login; 
    String password; 
    String name; 
    String surname; 
    GregorianCalendar birthDate; 
    String email; 
    GregorianCalendar joinDate; 
    String randomKey; 
    List<UserRole> userRoles = new ArrayList<UserRole>(); 

    public User(){ } //JavaBean Hibernate requirement 

    @Id 
    @GeneratedValue(generator="increment") 
    @GenericGenerator(name="increment", strategy = "increment") 
    @Column(name="USER_ID", unique=true, nullable=false) 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 
... 

    @OneToMany(mappedBy = "user", fetch = FetchType.LAZY) 
    public List<UserRole> getUserRoles() { 
     return userRoles; 
    } 

    public void setAccountRole(List<UserRole> aUserRoles) { 
     for (UserRole role : aUserRoles) { 
      this.addUserRole(role); 
     } 
    } 

    public void addUserRole(UserRole aRole) { 
     if (!this.userRoles.contains(aRole)) { 
      aRole.setUser(this); 
      this.userRoles.add(aRole); 
     } 
    } 
} 


@Entity 
@Table(name = "USER_ROLE") 
public class UserRole { 

    Integer roleId; 
    String role; 
    User user; 

    public UserRole() { } 

// public UserRole(String role) { 
//  this.setRole(role); 
// } 

    @Id 
    @GeneratedValue(generator="increment") 
    @GenericGenerator(name="increment", strategy = "increment") 
    @Column(name = "ROLE_ID", unique = true, nullable = false) 
    public Integer getRoleId() { 
     return roleId; 
    } 

    public void setRoleId(Integer roleId) { 
     this.roleId = roleId; 
    } 

    @Basic 
    public String getRole() { 
     return role; 
    } 

    public void setRole(String role) { 
     this.role = role; 
    } 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "USER_ID", nullable = false) 
    public User getUser() { 
     return user; 
    } 

    public void setUser(User aUser) { 
     this.user = aUser; 
    } 
} 

Y esta es la primera excepción en mi stack trace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: pl.rafalo235.encyklopedia.model.dao.UserDAO pl.rafalo235.encyklopedia.controllers.HomeController.userDAO; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.orm.hibernate4.LocalSessionFactoryBean pl.rafalo235.encyklopedia.model.dao.UserDAO.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/encyklopediaDispatcherServlet-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.HibernateException: Error applying BeanValidation relational constraints 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1189) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1103) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1010) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4935) 
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5262) 
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5257) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
+0

intentar conseguir librarse del constructor por defecto, eso no es un requisito. – dardo

+0

¿Cuándo obtiene esta excepción? ¿Al inicio? Cuando intentas persistir? – threejeez

Respuesta

11

Trate de añadir a hibernar config en la primavera validation.mode - Ninguno:

<bean id="sessionFactory" 
     class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="hibernateProperties"> 
     <props> 
      .... 
      <prop key="javax.persistence.validation.mode">none</prop> 
     </props> 
    </property> 
</bean> 
+1

Funcionó para mí también .. Gracias @ crudo6. –

14

No estoy usando Spring y estoy usando hibernate 4.1.8 y funciona agregando a mi hibernate.cfg.xml:

<property name="javax.persistence.validation.mode">none</property> 
3

El uso de JPA e Hibernate funciona para mí añadir a persistence.xml:

<property name="javax.persistence.validation.mode" value="none"/> 
Cuestiones relacionadas