【问题标题】:Java Spring exception: No property xxx found for type class xxxJava Spring 异常:找不到类型类 xxx 的属性 xxx
【发布时间】:2014-05-13 12:07:11
【问题描述】:

我想添加一个新的存储库方法来检索元素列表。

主要问题是:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'insulinGTService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private xxx.xxx.xxx.repository.InsulinGTRepository xxx.xxx.xxx.service.jpa.InsulinGTServiceImpl.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'insulinGTRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: No property storelistfromcontainer found for type class xxx.xxx.xxx.domain.InsulinGT

我发现它无法自动装配 InsulinGTServiceImpl 中的 repository,如果您按照错误操作,您最终会进入 InsulinGTRepository strong> 有你可以看到的错误。

InsulinGTServiceImpl

    @Service("insulinGTService")
    @Repository
    @Transactional
    public class InsulinGTServiceImpl implements InsulinGTService {

    @Autowired
    private InsulinGTRepository repository;

    @Override
    @Transactional(readOnly = true)
    public List<InsulinGT> findByID(Long insulinid) {
        // TODO Auto-generated method stub
        return Lists.newArrayList(repository.findByUserid(insulinid));
    }

    @Override
    public InsulinGT save(InsulinGT insulin) {
        return repository.save(insulin);
    }



    @Override
    public List<InsulinGT> liststorelistfromcontainerSave(InsulinlistGT insulin) {
        // TODO Auto-generated method stub
        return repository.storelistfromcontainer(insulin);
    }



}

InsulinGTService

public interface InsulinGTService {

    public List<InsulinGT> findByID(Long insulinid);
    public InsulinGT save(InsulinGT insulin);
    public List<InsulinGT> storelistfromcontainerSave(InsulinlistGT insulin);

}

InsulinGTRepository 中说,派生查询无效!找不到类型 InsulinGT 的属性 storelistfromcontainer!

public interface InsulinGTRepository extends CrudRepository<InsulinGT, Long> {


    public List<InsulinGT> findByUserid (Long id);
    public List<InsulinGT> storelistfromcontainer(InsulinlistGT insulin);
}

胰岛素

@Entity
@Table(name = "insulin")
public class InsulinGT implements Serializable {                    
        private static final long serialVersionUID = 3333976984277807655L;
        private Long insulinid;
        private Long userid;
        private String ivalue;
        private String therapie;
        private String insulinname;
        private String einheit;
        private Date date;
        private Date time;

        @Id
        @GeneratedValue(strategy = IDENTITY)
        @Column(name = "insulin_id")
        public Long getInsulinid() {
            return insulinid;
        }

        public void setInsulinid(Long insulinid) {
            this.insulinid = insulinid;
        }

        @Column(name = "users_id")
        public Long getUserid() {
            return userid;
        }

        public void setUserid(Long userid) {
            this.userid = userid;
        }

        @NotNull    
        @Column(name = "ivalue")
        public String getIvalue() {
            return ivalue;
        }

        public void setIvalue(String ivalue) {
            this.ivalue = ivalue;
        }


        @Column(name = "date")
        public Date getDate() {
            return date;
        }

        public void setDate(Date date) {
            this.date = date;
        }


        @Column(name = "time")
        public Date getTime() {
            return time;
        }

        public void setTime(Date time) {
            this.time = time;
        }

        @Column (name = "therapie")
        public String getTherapie() {
            return therapie;
        }


        public void setTherapie(String therapie) {
            this.therapie = therapie;
        }

        @Column(name = "insulinname")
        public String getInsulinname() {
            return insulinname;
        }

        public void setInsulinname(String insulinname) {
            this.insulinname = insulinname;
        }

        @Column(name = "einheit" )
        public String getEinheit() {
            return einheit;
        }

        public void setEinheit(String einheit) {
            this.einheit = einheit;
        }

}

我已经尝试重命名课程,但没有任何帮助。没有新添加方法的旧版本可以正常工作,没有任何问题。 感谢您的每一次帮助。

【问题讨论】:

  • 您是否尝试阅读错误消息? Spring Data JPA 正在根据存储库接口上的方法名称自动生成查询,而您没有匹配的属性。
  • 以及如何添加所需的属性。我猜它在 InsulinGT 中,但该属性看起来如何,需要吗?
  • 您希望存储库接口上的storelistfromcontainer 方法做什么?
  • 您需要了解 Spring Data JPA 如何为方法名称生成实现。您指定的名称与 Spring Data JPA 知道如何处理的任何内容都不对应
  • @chrylis 该方法应该像 CrudRepository 中实现的 save 方法一样工作,以将元素推送到数据库中(在这种情况下,整个元素列表应该被推送到数据库中)

标签: java spring rest annotations


【解决方案1】:

http://docs.spring.io/spring-data/jpa/docs/1.5.0.RELEASE/reference/html/repositories.html#repositories.create-instances

您需要在单独的接口中定义自定义方法。

public interface CustomRepo {
    public List<InsulinGT> storelistfromcontainer(InsulinlistGT insulin);
}

现在定义一个基本接口如下

public interface InsulinGTRepository extends CrudRepository<InsulinGT, Long>, CustomRepo {
    public List<InsulinGT> findByUserid (Long id);
}

还用于提供满足 CustomRepo 的 bean:

public class CustomRepoImpl implements CustomRepo {
    @Override
    public List<InsulinGT> storelistfromcontainer(InsulinlistGT insulin) {
        throw new UnsupportedOperation("TODO");
    }
}

注意名称 CustomRepoImpl 很重要(extension 接口的默认 bean 查找策略是以 Impl 为后缀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2020-05-08
    • 2018-12-24
    • 1970-01-01
    • 2013-01-10
    • 2015-04-07
    • 2013-11-04
    • 1970-01-01
    相关资源
    最近更新 更多