简体   繁体   English

Spring Data返回空实体

[英]Spring Data returns empty entity

I'm trying to implement simple Spring Data application. 我正在尝试实现简单的Spring Data应用程序。 I have simple entity Employee with a few fields and I use method from CrudRepository: findById to retrieve employee from database. 我有几个字段的简单实体Employee,我使用CrudRepository中的方法:findById从数据库中检索员工。 But always result is empty, onlny ID field in entity is correct but other fields are empty. 但总是结果为空,实体中的唯一ID字段正确,而其他字段为空。 Even if I'm trying to get findAll() then I've got all records from table but they have only ID field, nothing else. 即使我试图获取findAll(),我也从表中获得了所有记录,但是它们只有ID字段,没有别的。

I do not use addonations just XML files of Hibernate .hbm.xml. 我不只是使用Hibernate .hbm.xml的XML文件添加附件。 There is how does looks entity with hbm.xml: hbm.xml的实体外观如何:

Employee entity: 员工实体:

public class Employee extends BaseEntity {
private static final long serialVersionUID = -1400760321767476971L;
private String empFirstName;
private String empPassword;
private String empRole;
private String empLastName;
private String empBirthDate;
private String empAvatar;
private Integer empDepartmentId;
private Integer empEnabled;
private Integer empPositionId;
private Integer empManagerId;
private Integer empIsManager;
private String empEvidenceNumber;
private Double empAreaOfWork;
private Integer empWorkingHoursPerDay;
private String empFirstWorkDay;

...getters/setters/constructors

Employee.hbm.xml: Employee.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="entity.Employee" table="vt_employee" catalog="VacationTool"
    optimistic-lock="version">


    <id name="id" type="java.lang.Integer">
        <column name="id_employee" />
        <generator class="identity" />
    </id>
    <property name="empPassword" type="string">
        <column name="emp_password" length="60" />
    </property>
    <property name="empRole" type="string">
        <column name="emp_role" length="45" />
    </property>
    <property name="empEnabled" type="java.lang.Integer">
        <column name="emp_enabled" />
    </property>
    <property name="empFirstName" type="string">
        <column name="emp_firstName" length="75" />
    </property>
    <property name="empLastName" type="string">
        <column name="emp_lastName" length="75" />
    </property>
    <property name="empBirthDate" type="string">
        <column name="emp_birthDate" length="10" />
    </property>
    <property name="empAvatar" type="string">
        <column name="emp_avatar" />
    </property>
    <property name="empDepartmentId" type="java.lang.Integer">
        <column name="emp_department_id" />
    </property>
    <property name="empPositionId" type="java.lang.Integer">
        <column name="emp_position_id" />
    </property>
    <property name="empManagerId" type="java.lang.Integer">
        <column name="emp_manager_id" />
    </property>
    <property name="empIsManager" type="java.lang.Integer">
        <column name="emp_isManager" />
    </property>
    <property name="empEvidenceNumber" type="string">
        <column name="emp_evidenceNumber" length="4" />
    </property>
    <property name="empAreaOfWork" type="java.lang.Double">
        <column name="emp_areaOfWork" precision="3" />
    </property>
    <property name="empWorkingHoursPerDay" type="java.lang.Integer">
        <column name="emp_workingHoursPerDay" />
    </property>
    <property name="empFirstWorkDay" type="string">
        <column name="emp_firstWorkDay" length="10" />
    </property>


</class>
</hibernate-mapping>

Employee entity extends BaseEntity with only one field "id" with setter/getter. 雇员实体仅使用setter / getter的一个字段“ id”扩展BaseEntity。

Employee repository: 员工资料库:

@Repository
public interface EmployeeRepository extends CrudRepository<Employee, Integer> {

}

EmployeeService: 的EmployeeService:

@Service
public class EmpService {
   @Autowired
   private EmployeeRepository employeeRepository;

   public Employee getEmployee(int id) {
       return employeeRepository.findById(id).get();

   }
}

After that i'm trying to use system.out.println in main controller and also display data on simple index page. 之后,我尝试在主控制器中使用system.out.println并在简单的索引页面上显示数据。 I'm sure it is not problem of displaying data because everything works fine with Hibernate. 我确定这不是显示数据的问题,因为Hibernate可以正常工作。 All records with Spring Data have only ID field. 所有带有Spring Data的记录都只有ID字段。 And there is query from logging in console: 并且从登录控制台有查询:

Hibernate: select employee0_.id_employee as id_emplo1_2_0_, employee0_.emp_password as emp_pass2_2_0_, employee0_.emp_role as emp_role3_2_0_, employee0_.emp_enabled as emp_enab4_2_0_, employee0_.emp_first_name as emp_firs5_2_0_, employee0_.emp_last_name as emp_last6_2_0_, employee0_.emp_birth_date as emp_birt7_2_0_, employee0_.emp_avatar as emp_avat8_2_0_, employee0_.emp_department_id as emp_depa9_2_0_, employee0_.emp_position_id as emp_pos10_2_0_, employee0_.emp_manager_id as emp_man11_2_0_, employee0_.emp_is_manager as emp_is_12_2_0_, employee0_.emp_evidence_number as emp_evi13_2_0_, employee0_.emp_area_of_work as emp_are14_2_0_, employee0_.emp_working_hours_per_day as emp_wor15_2_0_, employee0_.emp_first_work_day as emp_fir16_2_0_ from vacation_tool.vt_employee employee0_ where employee0_.id_employee=? 休眠:选择employee0_.id_employee为id_emplo1_2_0_,employee0_.emp_password为emp_pass2_2_0_,employee0_.emp_role为emp_role3_2_0_,employee0_.emp_enabled为emp_enab4_2_0_,employee0_.emp_first_name为emp_firs5_2_0_,employee0_.emp_last_name为emp_last6_2_0_,employee0_.emp_birth_date为emp_birt7_2_0_,employee0_.emp_avatar为emp_avat8_2_0_ ,employee0_.emp_department_id如emp_depa9_2_0_,employee0_.emp_position_id如emp_pos10_2_0_,employee0_.emp_manager_id如emp_man11_2_0_,employee0_.emp_is_manager如emp_is_12_2_0_,employee0_.emp_evidence_number如emp_evi13_2_0_,employee0_.emp_area_of_work如emp_are14_2_0_,employee0_.emp_working_hours_per_day如emp_wor15_2_0_,employee0_.emp_first_work_day从vacation_tool emp_fir16_2_0_ .vt_employee employee0_,其中employee0_.id_employee =?

How can I get all fields from database? 如何从数据库中获取所有字段? I have 15 records in my table with full data. 我的表中有15条记录以及完整数据。

It's a litle bit hard to help without the code, but you can check: 如果没有代码,很难帮助您,但是您可以检查:

  • is the other fields accessible (setters or public modifiers)? 是否可以访问其他字段(设置者或公共修饰符)?
  • are the fields mapped to the right column? 字段映射到右列吗? @Column(name="my_column") @Column(名称= “my_column”)

I found the problem. 我发现了问题。 During use my code there wasn't any error/warning but I found one property to add in application.properties: 在使用我的代码期间,没有任何错误/警告,但是我发现在application.properties中添加了一个属性:

hibernate.hbm2ddl.auto=update

This line creates missing columns in table so I just wanted to check it. 这行会在表格中创建缺少的列,所以我只想检查一下。 After that in console I saw there are creating new columns for ALL columns with more than one word eg in my table I had "emp_firstName" and there were creating new column "emp_first_name". 之后,在控制台中,我看到为所有具有多个单词的列创建新列,例如,在我的表中,我具有“ emp_firstName”,并且正在创建新列“ emp_first_name”。 Even if in my .hbm.xml I've declared this field: 即使在我的.hbm.xml中,我已经声明了以下字段:

<property name="empFirstName" type="string">
    <column name="emp_firstName" length="75" />
</property>

It doesn't work. 没用 So when I found this in console logging I changed this column and others using "_" and then everythinng works fine. 因此,当我在控制台日志记录中找到此内容时,我使用“ _”更改了此列和其他列,然后一切正常。

But I can't understand two things 但我不明白两件事

1) When I changed columns names BUT not changed properties in .hbm.xml it still works with wrong column name in property file(of course hibernate doesn't work in this case so I changed properties also with "_"). 1)当我更改列名但未更改.hbm.xml中的属性时,它仍然可以在属性文件中使用错误的列名工作(当然,在这种情况下,休眠不起作用,因此我也使用“ _”更改了属性)。 I have no idea what to thing about it? 我不知道该怎么办?

2) Why there is needed using "_" after each one word eg "first_name" in column name instead of eg "firstName"? 2)为什么在每个单词之后,例如列名中的“ first_name”而不是“ firstName”需要使用“ _”?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM