我在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;
}
}
这是我的表只是有字段用户名(nvarchar100)和密码(nvarchar100)而不是字符串的长度确切的长度,例如“大卫”长度是5.我的输出时,打印account.getUsername().length()总是100.请帮助我与它
3条答案
按热度按时间uyhoqukh1#
谢谢大家的评论,我发现了问题。对于像我这样有问题的人,这个问题属于数据库的数据类型,nchar类型是固定长度类型,所以当你插入数据时,db会自动添加一些空格字符来适应。为了解决这个问题,只需使用varchar或nvarchar
wdebmtf22#
您面临的问题与@Column注解中的length属性有关。当您在Hibernate中为字符串列指定length属性时,它会设置数据库中该列的最大长度。但是,如果要保存的字符串的长度小于最大长度,Hibernate会用空格填充剩余的空间。这就是为什么您在字符串中看到重复的退格符字符的原因。
要解决此问题,您可以使用Hibernate Validator提供的@Length注解。此注解允许您设置字符串的最大长度,而无需使用空格填充剩余空间。
请注意,您需要在项目中包含Hibernate Validator依赖项才能使@Length注解工作。您可以将以下依赖项添加到pom.xml文件中:
mhd8tkvw3#
使用@Size注解代替length。它会起作用
如果仍然不起作用,请使用