2011-01-15 12 views
0

私はエラー一対多の関係にHibernate問題

を得た私は、プロジェクトに1対多を追加春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; 
} 
私はAuthorityVO UserVOで@OneToManyを追加しませんしませんでした最初は

、すべては私のプロジェクトにそれらのものを追加しfine.Butだった私は、エラーが表と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) 

を得ました私は多くのウェブと電子ブックを見つけましたが、どこに問題があるのか​​分かりません。私を助けることができますか?

答えて

2

エンティティAuthorityVOには主キー(データベース)がありません。また、hibernateにID-Column(@Idで注釈)もありません。

さらに、UserVOで行ったように、優れたデータベース設計と意味論的列で、常にいくつかの数値の主キーを使用する方がよいでしょう。

+0

ありがとうございますlweller.Itはうまくいきます。Hibernate内の1つのエンティティマップに@ Id.Thanksが必要です。 – cddthd

0

AnnotationException:エンティティに指定されていません識別子:com.vaannila.vo.AuthorityVO

あなたがデータベース でAuthorityVOクラスの任意の主キーとデータベースとの@idマップのようなノーID列を持っていないわけです。 Hibernateは、AuthorityVOクラスの識別子(b/wオブジェクトを区別し、データベースからオブジェクトをフェッチするために使用する一意の列)を見つけることができません。

関連する問題