【发布时间】:2020-01-06 22:34:59
【问题描述】:
使用
在 Windows 10 操作系统中运行的 Hibernate 5.3、Spring Boot 2.1、MySQL。
我知道的
我已经在我的 phpmyadmin 上验证了属性的大小写。只要案例与我的实体类的属性相同,您就不必在该实体中显式定义列名。并且不需要使用@Column(name="tableattribute")。
问题
执行查询后,已正确检索到行数。例如,我的数据库包含 5 条记录,List 包含 5 个员工对象,但 Entity 的所有属性始终返回为空值。
我想删除在每个属性上显式声明列名,并确保它可以在实际服务器中工作,这可能会导致列名和属性名的大小写出现问题。
试过
我尝试在每个属性上添加 @Column('column Name all lowercase') 并检索值。
在了解到这一点后,我验证了表格列是否为小写,但不是小写。相反,它仍然按照我的 SQL 命令中的驼峰式大小写来创建表。
MySQL 表
CREATE TABLE `personal` (
`empID` int(11) NOT NULL,
`empNumber` varchar(15) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
`surname` varchar(50) NOT NULL DEFAULT '',
`firstname` varchar(50) NOT NULL DEFAULT '',
`middlename` varchar(50) NOT NULL DEFAULT '',
`middleInitial` varchar(10) DEFAULT NULL,
`nameExtension` varchar(10) DEFAULT '',
`salutation` varchar(15) NOT NULL DEFAULT ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
实体
只要@Column 并以小写形式指定列名,此实体现在就可以正常工作。但是每个属性都加上@Column,并且指定字段名全部小写,很烦人。
@Entity
@Table(name="personal")
public class Employee implements Serializable {
@Id
@Column(name="empID")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@NotNull
@Column(name="empnumber")
private String empNumber;
private String surname;
private String firstname;
private String middlename;
@Column(name="middleinitial")
private String middleInitial;
@Column(name="nameextension")
private String nameExtension;
}
DAO 上的实际查询片段
@Autowired
private EntityManager entityManager;
@Override
public List<Employee> findAll() {
Session currentSession = entityManager.unwrap(Session.class);
Query<Employee> query = currentSession.createQuery("from Employee", Employee.class);
return query.getResultList();
}
【问题讨论】:
-
有getter、setter、toString、equals等方法。我只是没有在我发布的代码中包含方法。
标签: java sql spring spring-boot jpql