我有一個「用戶」類:許多一對多關係檢索數據 - 休眠
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;
}
我試着用iterator:
List roles = user.getRegras();
for (Iterator it = roles.iterator(); it.hasNext();){
Role r = (Role) it.next();
out.println("Role:" + r.getRole());
}
我試圖實例變量 「角色」 中的 '用戶' 類像下面。但每一次的變量返回size 0:
@ManyToMany
@JoinTable (name = "user_roles", joinColumns=
{ @JoinColumn (name = "user_id")}, inverseJoinColumns=
{ @JoinColumn (name = "role_id")})
private List<Role> regras = new ArrayList<Role>();
我試圖從對象的用戶獲得的角色,但我得到一個NullPointerException異常時的方法大小()被調用。
List<Role> roles = (List<Role>)user.getRoles();
out.println("size roles: " + roles.size());
我想接取我的表「user_roles」從數據庫中檢索數據,但我不能dothis。誰能幫我?
由於提前
你的映射看起來OK。打開SQL日誌記錄以查看生成的查詢。然後,直接在數據庫上運行查詢以檢查它是否返回任何結果。 –
你可以發佈UserDAO類的代碼嗎? –
@PredragMaric他的Hibernate代碼充滿了問題。除非您確定確實沒有問題,否則請不要發佈一切正常。 –