2017-02-19 6 views
-1

Итак, переполнение стека привет. Я неприятность с hibrnate/JPA, получил это исключение:Использование @OneToMany или @ManyToMany для таргетинга на неотображенный класс:

org.hibernate.AnnotationException: Использование @OneToMany или @ManyToMany таргетирования неподключенного класса: com.vlad9pa.springapp.entity.User. роли [com.vlad9pa.springapp.entity.Role]

у меня есть 3 таблицы:

  1. пользователей: идентификатор, имя пользователя, пароль;
  2. Роли: id, имя;
  3. user_roles: user_id, role_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 -use-of-on-anomomany-or-manytomany-targeting-an-unmapped-clas) –

+0

Да, не помогло – Vlad9pa

+0

, чтобы быть уверенным на 100%. Можете ли вы добавить все имения классов сущностей? –

ответ

0

Итак, я только что создал новый проект и переписать весь код. И знаешь, что? Это сработало (возможно, потому, что я использовал другую фреймворк, а не hibernate - Spring JPA). Тот же код ...

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; 
     } 
} 
Смежные вопросы

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