提问者:小点点

困惑冬眠在Springmvc


我是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。请帮帮我


共1个答案

匿名用户

您面临的问题与@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>