使用@ManyToOne 查询 Hibernate returns null hql
Hibernate returns null hql in query with @ManyToOne
首先,如果我的问题看起来有点业余,我深表歉意,但我对 hibernate / jpa 和 mysql 的了解有些有限。
嗯,我有以下实体:
用户实体
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_user")
private Long idUser;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
@ManyToOne(optional = true, fetch = FetchType.EAGER)
@JoinColumn(name = "level", referencedColumnName = "id_level", nullable = true)
private Level level;
@Transient
private Long totalLikes;
}
从那里开始,我正在尝试执行以下 mysql 查询:
public User findUserByEmail(String email) {
Session session = HibernateUtil.getSessionFactory().openSession();
User user = null;
String hql = "SELECT "
+ "u.idUser as idUser, "
+ "u.nome as nome, "
+ "u.level as level, "
+ "(SELECT count(*) FROM UserLikes likes WHERE likes.user = u.idUser) as totalLikes "
+ "FROM User u WHERE u.email = :email";
try {
Query query = session.createQuery(hql);
query.setString("email", email);
query.setResultTransformer(Transformers.aliasToBean(User.class));
user = (Usuario) query.uniqueResult();
} catch (RuntimeException ex) {
throw ex;
} finally {
session.close();
}
return user;
}
上面的代码returns User 正常,但是returns null 当User 在数据库中搜索时没有在字段级别设置值。也就是说,如果我没记错的话,hibernate 会执行内部连接用户/级别而不是左连接,从而使 returns 为空。
有人知道如何解决这个问题吗?
我认为你需要使用它。
@ManyToOne //simple
@JoinColumn(nullable = true) simple
并且在您的查询中也使用简单。
FROM User u WHERE u.email = :email
我在类似的项目中使用它并工作。
干得好,伙计。
首先,如果我的问题看起来有点业余,我深表歉意,但我对 hibernate / jpa 和 mysql 的了解有些有限。
嗯,我有以下实体:
用户实体
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_user")
private Long idUser;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private String email;
@ManyToOne(optional = true, fetch = FetchType.EAGER)
@JoinColumn(name = "level", referencedColumnName = "id_level", nullable = true)
private Level level;
@Transient
private Long totalLikes;
}
从那里开始,我正在尝试执行以下 mysql 查询:
public User findUserByEmail(String email) {
Session session = HibernateUtil.getSessionFactory().openSession();
User user = null;
String hql = "SELECT "
+ "u.idUser as idUser, "
+ "u.nome as nome, "
+ "u.level as level, "
+ "(SELECT count(*) FROM UserLikes likes WHERE likes.user = u.idUser) as totalLikes "
+ "FROM User u WHERE u.email = :email";
try {
Query query = session.createQuery(hql);
query.setString("email", email);
query.setResultTransformer(Transformers.aliasToBean(User.class));
user = (Usuario) query.uniqueResult();
} catch (RuntimeException ex) {
throw ex;
} finally {
session.close();
}
return user;
}
上面的代码returns User 正常,但是returns null 当User 在数据库中搜索时没有在字段级别设置值。也就是说,如果我没记错的话,hibernate 会执行内部连接用户/级别而不是左连接,从而使 returns 为空。
有人知道如何解决这个问题吗?
我认为你需要使用它。
@ManyToOne //simple
@JoinColumn(nullable = true) simple
并且在您的查询中也使用简单。
FROM User u WHERE u.email = :email
我在类似的项目中使用它并工作。
干得好,伙计。