不是托管类型

yrdbyhpb  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(162)

我不熟悉hibernate和spring数据jpa。这是我的第一个项目,我正在使用其他项目的一些代码,在那里我正在学习编程。
问题是:
我正在尝试使用hibernate和springdatajpa来使用hsqldb。目前,我正在测试save和getall方法。在测试过程中,我得到了以下信息:

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataJpaRestaurantRepository' defined in file [C:\projects\Voting\target\classes\ru\internship\voting\repository\datajpa\DataJpaRestaurantRepository.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'crudRestaurantRepository' defined in ru.internship.voting.repository.datajpa.CrudRestaurantRepository defined in : Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class ru.internship.voting.model.Restaurant
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1356)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1206)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:571)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531)
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.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:925)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588)
at ru.internship.voting.Test.main(Test.java:14)

这是我的文件:
spring-db.xml文件

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:jpa="http://www.springframework.org/schema/data/jpa"
   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
   http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">

<context:property-placeholder location="classpath:db/hsqldb.properties" system-properties-mode="OVERRIDE"/>
<context:component-scan base-package="ru.internship.**.repository.datajpa"/>
<jpa:repositories base-package="ru.internship.**.repository.datajpa"/>

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
    <property name="url" value="${database.url}"/>
    <property name="username" value="${database.username}"/>
    <property name="password" value="${database.password}"/>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
      p:dataSource-ref="dataSource"
      p:packagesToScan="ru.javawebinar.**.model">
    <!--p:persistenceUnitName="persistenceUnit">-->

    <property name="jpaPropertyMap">
        <map>
            <entry key="#{T(org.hibernate.cfg.AvailableSettings).FORMAT_SQL}" value="${hibernate.format_sql}"/>
            <entry key="#{T(org.hibernate.cfg.AvailableSettings).USE_SQL_COMMENTS}" value="${hibernate.use_sql_comments}"/>
            <entry key="#{T(org.hibernate.cfg.AvailableSettings).JPA_PROXY_COMPLIANCE}" value="false"/>
            <!--<entry key="#{T(org.hibernate.cfg.AvailableSettings).HBM2DDL_AUTO}" value="${hibernate.hbm2ddl.auto}"/>-->
        </map>
    </property>

    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:showSql="${jpa.showSql}">
        </bean>
    </property>
</bean>

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <constructor-arg ref="dataSource"/>
</bean>

<bean id="namedJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="jdbcTemplate"/>
</bean>

数据仓库

@Repository
public class DataJpaRestaurantRepository implements RestaurantRepository {

private final CrudRestaurantRepository crudRepository;

public DataJpaRestaurantRepository(CrudRestaurantRepository crudRepository) {
    this.crudRepository = crudRepository;
}

@Override
public Restaurant save(Restaurant restaurant) {
    return crudRepository.save(restaurant);
}

@Override
public boolean delete(Restaurant restaurant, int UserId) {
    return false;
}

@Override
public Restaurant get(Restaurant restaurant, int userId) {
    return null;
}

@Override
public List<Restaurant> getAll() {
    return crudRepository.findAll();
}
}

渣油贮存

public interface CrudRestaurantRepository extends JpaRepository<Restaurant, Integer> {
}

餐厅

@Entity
@Table(name = "restaurants")
public class Restaurant extends AbstractNamedEntity {

@ElementCollection
@CollectionTable(name = "menu",
joinColumns = {@JoinColumn(name = "restaurant_Id", referencedColumnName = "id")})
@MapKeyColumn(name = "name")
@Column(name = "price")
private Map<String, Integer> menu;

@CollectionTable(name = "votes", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "vote_for_restaurant_id")
@ElementCollection
private Set<Integer> votesFromUsersId;

public Restaurant(Map<String, Integer> menu) {
    this.menu = menu;
}

public Restaurant(Map<String, Integer> menu, Set<Integer> votesFromUsersId) {
    this.menu = menu;
    this.votesFromUsersId = votesFromUsersId;
}

public Restaurant(Integer id, String name, Map<String, Integer> menu, Set<Integer> votesFromUsersId) {
    super(id, name);
    this.menu = menu;
    this.votesFromUsersId = votesFromUsersId;
}

public Restaurant() {
}

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题