infobip/infobip-spring-data-querydsl

How do with the @Transient attribute

Closed this issue · 12 comments

I use r2dbc infobip-spring-data-querydsl. But in my entity I hava attribute with @transient, this attribute is not a table column.
But when I run the select , I get the error.
for example
My entity is as following

@table("customer_order")
@DaTa
@AllArgsConstructor
@NoArgsConstructor

public class OrderPO {
@id
@column("id")
private Long id;
@column("customer_id")
private Long customerId;
@column("customer_name")
private String customerName;
@column("ordr_code")
private String ordrCode;
@column("address")
private String address;
@column("customer_mobile")
private String customerMobile;
@column("total_pirce")
private Float totalPirce;
@column("create_time")
private LocalDateTime createTime;

  @Transient
  private List<OrderItemPO> orderItemList;

  public void create()
  {
      this.createTime=LocalDateTime.now();
  }

}

I run following program

Flux orderPOFlux = orderDao.query(query ->query.
select(orderDao.entityProjection()).
from(qOrderPO).
orderBy(qOrderPO.id.desc()).
where(booleanBuilder).
limit(pageSize).
offset((page-1)*pageSize)).all();

I get error:

Unknown column 'OrderPO.OrderItemList' in 'field list'
Error has been observed at the following site(s):
|_ checkpoint ⇢ SQL "select OrderPO.id, OrderPO.customer_id, OrderPO.customer_name, OrderPO.ordr_code, OrderPO.address, OrderPO.customer_mobile, OrderPO.total_pirce, OrderPO.create_time, OrderPO.OrderItemList
from customer_order OrderPO
where OrderPO.id is not null
order by OrderPO.id desc
limit 1
offset 0" [DatabaseClient]

This error is not happen in JPA version. Can you help me? Thank you

@Transient is not currently supported (I'm looking into adding it), as a start can you try if it works without this field?

Please try 5.0.5 and let me know if it works.

@lpandzic
How to try the version 5.0.5. I can no find in mvnrepository.com. Can you release 5.0.5 to maven? Thank you!

It takes time to sync to Maven Central, it's available now if you click on the badge in README.md (it shows 5.0.4 but maven central lists 5.0.5).

@lpandzic
I have tried 5.0.5, but I get another error. My application can not run. The error show that my QuerydslR2dbcRepository about the entity with @transient can not been created.

my entity is as following
image

my QuerydslR2dbcRepository about this entity is as following
image

when my application run I get error as following:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'orderRespostoryImpl': Unsatisfied dependency expressed through field 'orderDao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderDao' defined in com.cesc.demo.domain.order.repository.mapper.OrderDao defined in @EnableR2dbcRepositories declared on QuerydslR2dbcRepositoriesAutoConfigureRegistrar.EnableR2dbcRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:660)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
... 35 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'orderDao' defined in com.cesc.demo.domain.order.repository.mapper.OrderDao defined in @EnableR2dbcRepositories declared on QuerydslR2dbcRepositoriesAutoConfigureRegistrar.EnableR2dbcRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1786)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:602)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657)
... 49 more
Caused by: java.lang.NullPointerException
at com.querydsl.core.types.ConstructorExpression.getParameterTypes(ConstructorExpression.java:58)
at com.querydsl.core.types.ConstructorExpression.(ConstructorExpression.java:72)
at com.querydsl.core.types.Projections.constructor(Projections.java:122)
at com.infobip.spring.data.r2dbc.QuerydslR2dbcRepositoryFactory.getConstructorExpression(QuerydslR2dbcRepositoryFactory.java:119)
at com.infobip.spring.data.r2dbc.QuerydslR2dbcRepositoryFactory.getRepositoryFragments(QuerydslR2dbcRepositoryFactory.java:64)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepositoryComposition(RepositoryFactorySupport.java:371)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:276)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:323)
at org.springframework.data.util.Lazy.getNullable(Lazy.java:230)
at org.springframework.data.util.Lazy.get(Lazy.java:114)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:329)
at org.springframework.data.r2dbc.repository.support.R2dbcRepositoryFactoryBean.afterPropertiesSet(R2dbcRepositoryFactoryBean.java:167)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1845)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1782)
... 59 more

This error I have meet when I add @QueryType(PropertyType.NONE) in front of the attribute with @transient . For example:
@transient
@QueryType(PropertyType.NONE)
private List orderItemList;

Can you help me how to solve this problem. Thank you!

But after I change the version 5.0.4. The application can run and get the error as the first comment.

There's a bug in constructor discovery code. I'll let you know once it's fixed.

@kengan have you tried 5.1.0?

@lpandzic
I have tried 5.1.0. Everything is Ok. Thank you very much!

You're welcome.