【问题标题】:Spring JPA, @SqlResultSetMapping mapping to JPA repositorySpring JPA,@SqlResultSetMapping 映射到 JPA 存储库
【发布时间】:2018-03-30 15:43:41
【问题描述】:

应用程序:春季启动

我正在尝试使用 @SqlResultSetMapping 将非实体类映射到 JPA 存储库 和@NamedNativeQuery

运行应用程序时出现以下错误:

通过字段“cityAddressRepository”表示的不满足的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“cityAddressRepository”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Not a managed type: class com.city.strom.core.domain.CityAddressEntity 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573) ~[spring-beans-5.0.0.RC1.jar:5.0.0.RC1]

任何帮助都会得到帮助,我的实施中有什么问题吗

CityAddress.java

public class CityAddress { 

    private static final long serialVersionUID = -4860426805452667396L;

    private Integer objectid;
    private String streetname;
    private String streetnumber;


    public Integer getObjectid() {
        return objectid;
    }
    public void setObjectid(Integer objectid) {
        this.objectid = objectid;
    }
    public String getStreetname() {
        return streetname;
    }
    public void setStreetname(String streetname) {
        this.streetname = streetname;
    }
    public String getStreetnumber() {
        return streetnumber;
    }
    public void setStreetnumber(String streetnumber) {
        this.streetnumber = streetnumber;
    }

}

CityAddressEntity.java

@Entity
@SqlResultSetMapping(
    name="cityaddressmap",
    entities={
        @EntityResult(
           entityClass=CityAddress.class,
              fields={
                  @FieldResult(name="objectid", column="ID"),
                  @FieldResult(name="streetnumber", column="STREETNUMBER"),
                  @FieldResult(name="streetname", column="STREETNAME")
              }         
        )
    }
) 
@NamedNativeQuery(
    name="CityAddressEntity.AllCityAddresses", 
    query="select OBJECTID, ADD_NUM STREETNUMBER, trim(ADD_STREET || ' ' || ADD_STREET_TYPE) STREETNAME from SWPF_PARCEL_V;", 
    resultSetMapping="cityaddressmap")
public class CityAddressEntity implements Serializable{ 

    private static final long serialVersionUID = -4860426805452667396L;

    public CityAddressEntity()
    {

    }
}

CityAddressRepository.java

public interface CityAddressRepository extends JpaRepository<CityAddressEntity, Long>{

    @Query(name="CityAddressEntity.AllCityAddresses")
    public List<CityAddress> AllCityAddresses();

}

【问题讨论】:

  • 有人可以帮忙吗?

标签: java spring-mvc spring-data-jpa


【解决方案1】:

CityAddress 不是实体,使用 targetClass 代替 entityClass。试试这样的:

@SqlResultSetMapping(
    name="cityaddressmap",
    classes={
        @ConstructorResult(
           targetClass=CityAddress.class,
              columns={
                  @FieldResult(name="ID", type=Integer.class),
                  @FieldResult(name="STREETNUMBER", type=String.class),
                  @FieldResult(name="STREETNAME", type=String.class)
              }         
        )
    }
) 

并将构造函数添加到 CityAddress

    public class CityAddress { 

        private Integer objectid;
        private String streetname;
        private String streetnumber;

        public CityAddress(Integer objectid, String streetname, String streetnumber) {
           this.objectid = objectid;
           this.streetname = streetname;
           this.streetnumber = streetnumber;
        }

【讨论】:

  • 您不能将@FieldResult@ConstructorResult 一起使用。这个答案是错误的。
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 2018-11-25
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-09
  • 2014-10-01
相关资源
最近更新 更多