2011-01-15 3 views
0

У меня весна Intergrate гибернации project.But добавить один-ко-многим в проекте я получил ошибкуОдин-ко-многим Hibernate Проблема

My SQL Script: класс

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; 
} 
} 

AuthorityVO карта класса столовых власти

@Entity 
@Table(name="authorities",schema="public") 
public class AuthorityVO { 

private UserVO user; 
private String authority; 

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="username",nullable=false) 
@ForeignKey(name="fk_authorities_users") 
public UserVO getUser() { 
    return user; 
} 

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


@Column(name="authority",length = 50,nullable=false) 
public String getAuthority() { 
    return authority; 
} 

public void setAuthority(String authority) { 
    this.authority = authority; 
} 

Сначала я не добавлял @OneToMany в UserVO и не AuthorityVO, все было fine.But я добавить эти вещи к моему проекту я получил ошибку

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 не истинную карту с табл власти. Но я нахожу много веб-страниц и электронных книг, но я не могу найти, где проблема, чтобы исправить. Можете ли вы мне помочь?

ответ

2

У вашего объекта AuthorityVO нет первичного ключа (базы данных), а также нет ID-колонки (аннотируется с помощью @Id) в спящем режиме.

Более того, лучше использовать всегда числовые первичные ключи в хорошем дизайне базы данных и семантический столбец, как и с UserVO.

+0

Спасибо lweller.It отлично работает. Теперь я знаю, что 1 карта сущности в Hibernate должна иметь @ Id.Спасибо за вашу помощь. – cddthd

0

AnnotationException: Нет Идентификатор, указанный для объекта: com.vaannila.vo.AuthorityVO

это означает, что вы не имеете любой первичный ключ для класса AuthorityVO в базе данных и нет ID колонки, как @id карта с базой данных. Таким образом, Hibernate не может найти идентификатор (уникальный столбец, который используется для разграничения ч/б объектов и использования для извлечения объектов из базы данных) для класса AuthorityVO.

Смежные вопросы