2011-01-15 3 views
0

나는 오류일대 다 관계 최대 절전 모드 문제

있어 내가 프로젝트에 일대을 추가 봄 intergrate 수 최대 절전 모드 project.But에 봉착

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

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

처음에는 내가 UserVO에 @OneToMany를 추가하지 않았다 AuthorityVO은, 모든

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 works fine.I 지금은 최대 절전 모드의 엔티티지도가 @ Id가 있어야한다는 것을 알고 있습니다. 도움을 청합니다. – cddthd

0

AnnotationException : 엔티티에 지정된 번호 확인 : com.vaannila.vo.AuthorityVO

은 당신이 데이터베이스 에서 AuthorityVO 클래스에 대한 기본 키 및 데이터베이스와 @id지도와 같은 어떤 ID 열이없는 것을 의미합니다. 그래서 Hibernate는 AuthorityVO 클래스에 대해 어떤 식별자 (b/w 객체를 차별화하고 데이터베이스에서 객체를 가져 오는 데 사용하는 고유 한 열)를 찾을 수 없습니다.