Spring Roo 2.0.RC1 - 实体项目具有空值的元素不会显示在列表中

时间:2017-06-12 08:15:38

标签: spring-roo

我已更改了诊所示例,并为宠物添加了实体投影。

entity projection --class ~.domain.PetInfo --entity ~.domain.Pet --fields id,name,type,birthDay,owner --entityFormatExpression "#{name} (#{type})"
repository jpa --entity ~.domain.Pet --interface ~.repository.PetRepository --defaultReturnType ~.domain.PetInfo

我删除了所有寻找宠物的人。查找程序必须更改使用PetInfo作为返回类型 - 所以我删除它们以仅测试实体投影。

在我添加实体投影之前,列表会显示带有和没有设置所有者的表Pets中的所有条目。

enter image description here

当我在列表中添加实体投影时,只显示拥有者不为空的项目。

enter image description here

我使用mysql db并更改设置:

// Create the Spring Boot application
project setup --topLevelPackage org.springframework.roo.clinic --projectName clinic_new --java 8

// Setup the data access layer
// jpa setup --provider HIBERNATE --database HYPERSONIC_IN_MEMORY
jpa setup --provider HIBERNATE --database MYSQL --databaseName clinic --userName root --password
// --force funktioniert nicht also erst löschen un dann neu hinzufügen
property remove --key spring.datasource.url
property add --key spring.datasource.url --value jdbc:mysql://localhost:3307/clinic --force
property add --key spring.jpa.properties.hibernate.hbm2ddl.auto --value update
property add --key spring.jpa.properties.hibernate.dialect --value org.hibernate.dialect.MySQL5Dialect
property add --key spring.jpa.hibernate.naming.physical-strategy --value org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
property remove --key spring.messages.encoding
property add --key spring.messages.encoding --value UTF-8
property add --key spring.jpa.hibernate.show-sql --value true

1 个答案:

答案 0 :(得分:1)

Spring Roo在PetRepositoryImpl_Roo_Jpa_Repository_Impl.aj文件中生成以下代码:

JPQLQuery<Pet> query = from(pet);
[...]
return loadPage(query, pageable, Projections.constructor(PetInfo.class, pet.id, pet.name, pet.type, pet.owner ));

默认情况下,loadPage函数会生成一个包含所有者表的INNER JOIN,因此只显示与Owner有关系的pet元素。

为防止这种情况发生,您应该引入findAll方法并定义leftJoin语句。

JPQLQuery<Pet> query = from(pet).leftJoin(pet.owner);

有了这个,你应该能够获得所有与关系无关的宠物。

希望它有所帮助,