【问题标题】:Why repo interface extending 2 other repo interfaces is not being wired in controller?为什么扩展 2 个其他 repo 接口的 repo 接口没有连接到控制器中?
【发布时间】:2018-10-27 13:49:31
【问题描述】:

我尝试按照here 所述的文档进行操作,但它似乎不起作用,因为我收到此错误:

创建名为“memberRepository”的 bean 时出错:调用 init 方法失败;嵌套异常是 java.lang.IllegalArgumentException: Not a managed type: class com.timewin.application.model.Member

这是成员类:

public class Member {
    private String name;
    private List<Activity> activities = new ArrayList<>();


    public Member() {

    }

    public Member(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }

    public List<Activity> getActivities() {
        return activities;
    }

    public void setActivities(Activity activity) {
        getActivities().add(activity);
        System.out.println("Member: 'activities' of " + this.getName() + " was set to " + activity.getType());
        activity.update(this);
    }

}

这些是存储库接口和实现:

@Repository
public interface MemberRepository extends JpaRepository<Member, Float>, MemberRepositoryCustom{
}

public interface MemberRepositoryCustom {
    public void createMember(String memberName);
    public void addActivityToMember(Activity activity, String member);
    public void addMemberToActivity(String member, Activity activity);
}

@Repository
public class MemberRepositoryImpl implements MemberRepositoryCustom{
    //implementation here
}

我尝试在控制器中自动连接MemberRepository:

@Autowired
MemberRepository memberRepository;

【问题讨论】:

    标签: spring-data


    【解决方案1】:

    JpaRepository 应该与托管实体的类一起操作,因此如果 Member 类是某个 DB 表 member 的 反射,那么您必须使用 @Entity 和 @ 对其进行注释987654326@(就像Activity 类)

    @Entity
    @Table(name = "member")
    public class Member {
        @Column(name="name")
        private String name;
        @JoinColumn(name = "...", referencedColumnName="...")
        @OneToMany(...)
        private List<Activity> activities;
    
    }
    

    这是一个很好的reference 如何使用实体 您还必须调整配置才能使用此功能:

    @Configuration
    /****/
    @EnableJpaRepositories("com.timewin.application.repository")
    @EntityScan("com.timewin.application.model")
    /***/
    public class AppConfig /**some extends***/{
    }
    

    顺便说一句,我认为名称 model 不是包含实体的包的最佳选择,因为这个名称通常用于存放一些中间/DTO/输入输出 POJO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 1970-01-01
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多