Hibernate 一对多关系休眠问题

Hibernate 一对多关系休眠问题,hibernate,Hibernate,我正在进行Spring集成Hibernate项目。但我在项目中添加了一个到多个,我得到了错误 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Invocation of init method

我正在进行Spring集成Hibernate项目。但我在项目中添加了一个到多个,我得到了错误

  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.vaannila.vo.AuthorityVO
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
我的SQL脚本:

create table users(
  username varchar(50) not null primary key,
  password varchar(50) not null,
  enabled boolean not null
  );

create table authorities (
  username varchar(50) not null,
  authority varchar(50) not null,
  constraint fk_authorities_users foreign key(username)references users(username));
UserVO类映射表用户

    @Entity
@Table(name="users",schema="public")
public class UserVO implements UserDetails,Serializable{

 /**
  * 
  */
 private static final long serialVersionUID = 1L;

 private String username;
 private String password;
 private boolean enabled;

 private Set<AuthorityVO>authorityList = new HashSet<AuthorityVO>();

 @Id
 @Column(name="username",length=50,nullable=false)
 @Override
 public String getUsername() {
  // TODO Auto-generated method stub
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 @Column(name="password",length=50,nullable=false)
 @Override
 public String getPassword() {
  // TODO Auto-generated method stub
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 @Column(name="enabled",nullable=false)
 @Override
 public boolean isEnabled() {
  // TODO Auto-generated method stub
  return enabled;
 }


 public void setEnabled(boolean enabled) {
  this.enabled = enabled;
 }


 @OneToMany(fetch = FetchType.LAZY,cascade = CascadeType.ALL,mappedBy="user")
 public Set<AuthorityVO> getAuthorityList() {
  return authorityList;
 }

 public void setAuthorityList(Set<AuthorityVO> authorityList) {
  this.authorityList = authorityList;
 }

 @Transient
 @Override
 public Collection<GrantedAuthority> getAuthorities() {
  // TODO Auto-generated method stub

  return null;
 }

 @Transient
 @Override
 public boolean isAccountNonExpired() {
  // TODO Auto-generated method stub
  return false;
 }
 @Transient
 @Override
 public boolean isAccountNonLocked() {
  // TODO Auto-generated method stub
  return false;
 }

 @Transient
 @Override
 public boolean isCredentialsNonExpired() {
  // TODO Auto-generated method stub
  return false;
 }
}
起初,我没有在UserVO中添加@OneToMany,也没有在AuthorityVO中添加@OneToMany,一切都很好。但我将这些东西添加到我的项目中,我发现了一个错误

  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySessionFactory' defined in ServletContext resource [/WEB-INF/dispatcher-servlet.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: No identifier specified for entity: com.vaannila.vo.AuthorityVO
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
 at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
 at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
 at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
 at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
 at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)

我知道这个错误意味着AuthorityVO不是表权限的真实映射。但我找到了很多web和电子书,但我找不到问题要解决的地方。你能帮我吗

您的实体AuthorityVO没有主键(数据库),因此在hibernate中也没有ID列(用@ID注释)


此外,在良好的数据库设计和语义列中,最好始终使用一些数字主键,就像使用UserVO一样。

注释异常:没有为实体指定标识符:com.vaannila.vo.AuthorityVO

这意味着您在数据库中没有AuthorityVO类的任何主键 没有像@ID-map这样的ID列与数据库连接。
因此Hibernate找不到AuthorityVO类的任何标识符(用于区分b/w对象和用于从数据库获取对象的唯一列)。

谢谢lweller。它工作正常。我现在知道Hibernate中的1个实体映射必须有@Id。感谢您的帮助。