对spring mvc中的hibernate感到困惑



我是spring MVC的新手,现在正在与hibernate作斗争。我可以从ms sql server提取数据,但字符串的长度总是设置最大字段(我认为添加重复的退格字符)。我的实体

@Entity
@Table(name = "Account")
public class Account {
@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "Username", length = 10)
private String username;
@Column(name = "Password")
private String password;
//getter setter

}

我的控制器

@Controller
public class HibernateController {
@Autowired
SessionFactory sessionFactory; 
@GetMapping("/getu")
public String getUser() {
List<Account> list = getList();
for (Account account : list) {
System.out.println("name: " + account.getUsername());
System.out.println("nameLength: " + account.getUsername().length());
System.out.println("pass: " + account.getPassword());
}
return "index";
}
@Transactional
public List<Account> getList() {
Session session = getSession();
String hql = "FROM Account";
Query query = session.createQuery(hql);
return query.list();
}
public Session getSession() {
Session session;
try {
session = sessionFactory.getCurrentSession();
} catch (HibernateException e) {
session = sessionFactory.openSession();
}
return session;
}
}

这是我的表只有字段username(nvarchar100)和password(nvarchar100)而不是让字符串的长度精确到长度例如"david"长度是5。当打印account.getUsername().length()时,我的输出总是100。请帮我一把

感谢在这篇文章中评论的每个人。我找到问题了。问题是由数据库的数据类型引起的。Nchar类型是固定长度的,所以当你插入数据时,数据库会自动添加一些空格字符来适应。对于解决方案,只需使用varchar或nvarchar

使用@Size注解代替length。它会工作的


@Entity
@Table(name = "Account")
public class Account {
@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "Username")
@Size(max = 10)
private String username;
@Column(name = "Password")
private String password;
// getters and setters
}

如果仍然不行,请使用


@Column(length = 10)
@org.hibernate.annotations.ColumnTransformer(
read = "trim(my_column)",
write = "trim(?)"
)
private String myColumn;

最新更新