2017-02-19 7 views
-1

こんにちは、スタックオーバーフロー。 com.vlad9pa.springapp.entity.User:マップされていないクラスをターゲットと@OneToManyの使用または@ManyToMany :マップされていないクラスを対象とした@OneToManyまたは@ManyToManyの使用:

org.hibernate.AnnotationException: 私はhibrnate/JPAとのトラブルをしました、この例外が発生しました。

  1. ユーザー:役割は[com.vlad9pa.springapp.entity.Role]

私は3つのテーブル持っているID、ユーザ名、パスワードを。

  • roles:id、name;
  • user_roles:user_id、roles_id。
  • インポート:ここ

    import javax.persistence.*; 
    import java.util.Set; 
    

    が私のエンティティとhibernate.cfg.xmlのです: ユーザー:

    @Entity 
    @Table(name = "users") 
    public class User { 
    private int id; 
    private String username; 
    private String password; 
    private Set<Role> roles; 
    
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "id") 
    public int getId() { 
        return id; 
    } 
    
    public void setId(int id) { 
        this.id = id; 
    } 
    
    @Basic 
    @Column(name = "username") 
    public String getUsername() { 
        return username; 
    } 
    
    public void setUsername(String username) { 
        this.username = username; 
    } 
    
    @Basic 
    @Column(name = "password") 
    public String getPassword() { 
        return password; 
    } 
    
    public void setPassword(String password) { 
        this.password = password; 
    } 
    
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity = Role.class) 
    @JoinTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"), 
         inverseJoinColumns = @JoinColumn(name = "role_id")) 
    public Set<Role> getRoles() { 
        return roles; 
    } 
    
    public void setRoles(Set<Role> roles) { 
        this.roles = roles; 
    } 
    

    役割:

    @Entity 
    @Table(name = "roles") 
    public class Role { 
    
    private int id; 
    private String name; 
    
    private Set<User> users; 
    
    @Id 
    @Column(name = "id") 
    public int getId() { 
        return id; 
    } 
    
    public void setId(int id) { 
        this.id = id; 
    } 
    
    @Basic 
    @Column(name = "name") 
    public String getName() { 
        return name; 
    } 
    
    public void setName(String name) { 
        this.name = name; 
    } 
    
    
    
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "roles") 
    public Set<User> getUsers() { 
        return users; 
    } 
    
    public void setUsers(Set<User> users) { 
        this.users = users; 
    } 
    

    hibernate.cfg.xmlの:

    <hibernate-configuration> 
        <session-factory> 
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</property> 
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property> 
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/e_shop</property> 
        <property name="hibernate.hbm2ddl.auto">update</property> 
        <property name="show_sql">false</property> 
        <property name="hibernate.current_session_context_class">thread</property> 
        <mapping class="com.vlad9pa.springapp.entity.Role"/> 
        <mapping class="com.vlad9pa.springapp.entity.User"/> 
    </session-factory> 
    

    +0

    はあなたがチェックしている(あなたがそうでなければ、「マップされていないエラー」を得る、あなたのモデルを持っているすべてのクラスのために、この行を追加する必要があります)[この](http://stackoverflow.com/questions/4956855/hibernate-problemあなたがエンティティクラスのすべてのインポートを追加できますか? –

    +0

    はい、助けてくれませんでしたか? – Vlad9pa

    +0

    は100%確実です。エンティティクラスのすべてのインポートを追加できますか? –

    答えて

    0

    だから、私はちょうど新しいプロジェクトを作成し、全体のコードを書き換えます。そしてあなたは何を知っていますか?これはうまくいきました(おそらく、JPAのSpringを休止していない別のフレームワークを使用したためです)。同じコード...

    0

    私はHibernateUtilクラスを使用しているので、この行を追加することでこの問題を解決しました。 "configuration.addAnnotatedClass(Role.class);"

    public class HibernateUtil { 
         private static SessionFactory sessionFactory; 
         private static ServiceRegistry serviceRegistry; 
         static { 
          try { 
           Configuration configuration = new Configuration().configure(); 
           configuration.addAnnotatedClass(User.class); 
           configuration.addAnnotatedClass(Role.class); 
    
           serviceRegistry = new StandardServiceRegistryBuilder() 
             .applySettings(configuration.getProperties()).build(); 
           sessionFactory = configuration.buildSessionFactory(serviceRegistry); 
          } catch (HibernateException e) { 
           System.out.println(e); 
          } 
         } 
    
         public static SessionFactory getSessionFactory(){ 
          return sessionFactory; 
         } 
    } 
    
    関連する問題