【发布时间】:2015-04-30 12:21:19
【问题描述】:
我有一个“用户”类:
public class User implements Serializable {
@Id
@GeneratedValue
int id;
String nome;
@Column(unique = true)
String email;
@ManyToMany
@JoinTable (name = "user_roles", joinColumns=
{ @JoinColumn (name = "user_id")}, inverseJoinColumns=
{ @JoinColumn (name = "role_id")})
private List<Role> roles;
我有一个“角色”类:
public class Role implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue
int id;
@Column(unique = true)
String role;
关系:用户有角色,角色有用户。我这里有一个多对多的关系。关系是单向的,我的主要实体是用户。
在我的数据库中有一个名为“user_roles”的表,它是自动创建的。我有一个注册了两个角色的用户。
当我使用“UserDao”类从数据库中检索用户并尝试访问用户的角色时,我得到 NullPointerException。我获得了所有其他信息(姓名、电子邮件等),但我无法访问角色。
我的“UserDao”类:
public class UserDaoImpl implements UserDao{
private static final transient Logger log = LoggerFactory.getLogger(UserDaoImpl.class);
private final String HIBERNATE_CFG = "data.cfg.xml";
@Override
public int insertUser (User user){
int code = 0;
Session session = new HibernateUtil(HIBERNATE_CFG).getSessionFactory().getCurrentSession();
try {
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
code = 1;
}
catch (Exception e) {
log.error(e.getMessage());
session.getTransaction().rollback();
code = 0;
}
return code;
}
@Override
public List<User> getAll() {
Session session = new HibernateUtil(HIBERNATE_CFG).getSessionFactory().getCurrentSession();
List<User> users = null;
try
{
session.beginTransaction();
String queryString = "SELECT * FROM USER;";
SQLQuery consulta = session.createSQLQuery(queryString);
consulta.setResultTransformer(Transformers.aliasToBean(User.class));
users = (List<User>) consulta.list();
session.getTransaction().commit();
}
catch(ConstraintViolationException e)
{
log.error(e.getMessage());
session.getTransaction().rollback();
}
return users;
}
我尝试使用迭代器:
List roles = user.getRegras();
for (Iterator it = roles.iterator(); it.hasNext();){
Role r = (Role) it.next();
out.println("Role:" + r.getRole());
}
我尝试在“用户”类中实例化变量“角色”,如下所示。但是每次变量返回大小为0:
@ManyToMany
@JoinTable (name = "user_roles", joinColumns=
{ @JoinColumn (name = "user_id")}, inverseJoinColumns=
{ @JoinColumn (name = "role_id")})
private List<Role> regras = new ArrayList<Role>();
我尝试从 Object User 获取角色,但在调用方法 size() 时收到 NullPointerException。
List<Role> roles = (List<Role>)user.getRoles();
out.println("size roles: " + roles.size());
我正在尝试访问我的表“user_roles”以从数据库中检索数据,但我不能这样做。谁能帮帮我?
提前致谢
【问题讨论】:
-
您的映射看起来不错。打开 SQL 日志记录以查看生成的查询。然后,直接在 DB 上运行查询以检查它是否返回任何结果。
-
你能发布 UserDAO 类的代码吗?
-
@PredragMaric 他的 Hibernate 代码充满了问题。请不要发布一切正常,除非您非常确定确实没有问题。
-
@TimBiegeleisen 我指的是
@ManyToMany映射,没关系。 -
他缺少
mappedBy注释,我相信这会导致问题。
标签: java hibernate many-to-many