我是Spring mvc的新手,现在正在与hibernate作斗争。我可以从ms sql服务器中提取数据,但字符串的长度始终设置为字段的最大值(我认为添加重复的退格字符)。我的实体
@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)而不是字符串长度精确的长度,例如“david”长度为5。我在打印帐户. getUsername().long()时的输出始终为100。请帮帮我
您面临的问题与@Col列注释中的长度属性有关。当您在Hibernate中为字符串列指定长度属性时,它会设置数据库中该列的最大长度。但是,如果正在保存的字符串的长度小于最大长度,Hibernate会用空格填充剩余空间。这就是您在字符串中看到重复退格字符的原因。
要解决此问题,您可以使用Hibernate Validator提供的@Llong注释。此注释允许您设置字符串的最大长度,而无需用空格填充剩余空间。
@Entity
@Table(name="Account")公共类Account{
@Id
@Column(name = "Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "Username")
@Length(max = 10)
private String username;
@Column(name = "Password")
private String password;
// getters and setters
}
请注意,您需要在项目中包含Hibernate Validator依赖项才能使@Llong注释正常工作。您可以将以下依赖项添加到您的pom. xml文件中:
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>7.0.1.Final</version>