Java 休眠条件列表始终返回0项
我的DAO(findByUsername)中的函数始终返回0行,无论我是否更改实体类,即使从实体中删除注释,也没有例外,只有0行。根据我找到的一些示例,这段代码是在基于spring的应用程序中实现的 DAO:Java 休眠条件列表始终返回0项,java,spring,hibernate,Java,Spring,Hibernate,我的DAO(findByUsername)中的函数始终返回0行,无论我是否更改实体类,即使从实体中删除注释,也没有例外,只有0行。根据我找到的一些示例,这段代码是在基于spring的应用程序中实现的 DAO: @Repository("userDao") public class UserDao extends CustomHibernateDaoSupport { public void save(User user) { getHibernateTemplate().
@Repository("userDao")
public class UserDao extends CustomHibernateDaoSupport {
public void save(User user) {
getHibernateTemplate().save(user);
}
public void delete(User user) {
getHibernateTemplate().delete(user);
}
public User findByUsername(String username) throws DataNotFoundException {
Session session = getSession();
Criteria crit = session.createCriteria(User.class);
System.out.println(username);
crit.add(Restrictions.eq("username", username));
crit.setMaxResults(1);
List<User> users = crit.list();
System.out.println(users);
if (users.size() < 1) {
throw new DataNotFoundException();
}
return users.get(0);
}
}
@Entity
@Table(name = "users")
public class User {
private Integer id;
private String username;
private String password;
private boolean active;
private String activationCode;
private Date createdAt;
private String email;
private Set<Wall> walls = new HashSet<Wall>();
@Id
@GeneratedValue
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "username", unique = true, nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "password")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = "active")
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
@Column(name = "activation_code")
public String getActivationCode() {
return activationCode;
}
public void setActivationCode(String activationCode) {
this.activationCode = activationCode;
}
@Column(name = "created_at", columnDefinition = "DATETIME")
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
@Column(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "users_has_walls", joinColumns = {
@JoinColumn(name = "user_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "wall_id",
nullable = false, updatable = false) })
public Set<Wall> getWalls() {
return walls;
}
public void setWalls(Set<Wall> walls) {
this.walls = walls;
}
}
@Repository(“userDao”)
公共类UserDao扩展了CustomHibernateDaoSupport{
公共作废保存(用户){
getHibernateTemplate().save(用户);
}
公共作废删除(用户){
getHibernateTemplate().delete(用户);
}
公共用户findByUsername(字符串用户名)引发DataNotFoundException{
Session=getSession();
Criteria crit=session.createCriteria(User.class);
System.out.println(用户名);
标准添加(Restrictions.eq(“用户名”,username));
临界setMaxResults(1);
列表用户=crit.List();
System.out.println(用户);
if(users.size()<1){
抛出新的DataNotFoundException();
}
返回用户。获取(0);
}
}
实体:
@Repository("userDao")
public class UserDao extends CustomHibernateDaoSupport {
public void save(User user) {
getHibernateTemplate().save(user);
}
public void delete(User user) {
getHibernateTemplate().delete(user);
}
public User findByUsername(String username) throws DataNotFoundException {
Session session = getSession();
Criteria crit = session.createCriteria(User.class);
System.out.println(username);
crit.add(Restrictions.eq("username", username));
crit.setMaxResults(1);
List<User> users = crit.list();
System.out.println(users);
if (users.size() < 1) {
throw new DataNotFoundException();
}
return users.get(0);
}
}
@Entity
@Table(name = "users")
public class User {
private Integer id;
private String username;
private String password;
private boolean active;
private String activationCode;
private Date createdAt;
private String email;
private Set<Wall> walls = new HashSet<Wall>();
@Id
@GeneratedValue
@Column(name = "id", unique = true, nullable = false)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "username", unique = true, nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Column(name = "password")
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Column(name = "active")
public boolean isActive() {
return active;
}
public void setActive(boolean active) {
this.active = active;
}
@Column(name = "activation_code")
public String getActivationCode() {
return activationCode;
}
public void setActivationCode(String activationCode) {
this.activationCode = activationCode;
}
@Column(name = "created_at", columnDefinition = "DATETIME")
public Date getCreatedAt() {
return createdAt;
}
public void setCreatedAt(Date createdAt) {
this.createdAt = createdAt;
}
@Column(name = "email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "users_has_walls", joinColumns = {
@JoinColumn(name = "user_id", nullable = false, updatable = false) },
inverseJoinColumns = { @JoinColumn(name = "wall_id",
nullable = false, updatable = false) })
public Set<Wall> getWalls() {
return walls;
}
public void setWalls(Set<Wall> walls) {
this.walls = walls;
}
}
@实体
@表(name=“users”)
公共类用户{
私有整数id;
私有字符串用户名;
私有字符串密码;
私有布尔活动;
私有字符串激活码;
私人日期创建日期;
私人字符串电子邮件;
私有集walls=新HashSet();
@身份证
@生成值
@列(name=“id”,unique=true,nullable=false)
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
@列(name=“username”,unique=true,nullable=false)
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
@列(name=“password”)
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
@列(name=“active”)
公共布尔isActive(){
主动返回;
}
public void setActive(布尔激活){
这个.active=active;
}
@列(name=“激活码”)
公共字符串getActivationCode(){
返回激活码;
}
公共void setActivationCode(字符串activationCode){
this.activationCode=activationCode;
}
@列(name=“created_at”,columnDefinition=“DATETIME”)
公共日期getCreatedAt(){
返回createdAt;
}
公共void setCreatedAt(日期createdAt){
this.createdAt=createdAt;
}
@列(name=“email”)
公共字符串getEmail(){
回复邮件;
}
公用电子邮件(字符串电子邮件){
this.email=电子邮件;
}
@ManyToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL)
@JoinTable(name=“users\u有墙”,joinColumns={
@JoinColumn(name=“user\u id”,nullable=false,updateable=false)},
inverseJoinColumns={@JoinColumn(name=“wall\u id”,
nullable=false,updateable=false)})
公共集getWalls(){
返回墙;
}
公共空心设置墙(设置墙){
这个。墙=墙;
}
}
解决方案是将导入声明更改为
import javax.persistence.Entity;
而不是冬眠。
未导入用户实体类。明显的问题:数据库中是否有数据?还可以使用
crit.uniqueResult()
返回单个元素,而不是crit.list().get(0)代码>Hibernate生成的SQL是什么?有时,生成的SQL将不符合您对它应该做什么的期望。使用独立工具自行运行SQL以帮助调试问题。将SQL日志记录设置“hibernate.show_SQL”打开为“true”,并检查生成的查询。尝试手动对数据库运行查询从HQL获取信息:用户未映射[来自用户]。我在users表中有一行。hibernate似乎并没有映射我的类,而是将其更改为扫描整个包,并在运行时将实体打开为异常。即:com.walladverts.model.entities.Post.user中的未知映射,引用的属性未知:com.walladverts.model.entities.user.user