当前位置: 首页 > 知识库问答 >
问题:

在Spring数据和Hibernate中使用JPararePository

范福
2023-03-14

我一直在hibernate中使用Spring数据,我想知道避免代码浪费的最佳类组织是什么。这是我的实际结构:

    public interface FleetRepository extends JpaRepository<Fleet, Integer> {
}

然后我使用这个接口

public interface FleetServices {

     //Create one row into Fleet table, if id already exists this method executes an update
     public Fleet create(Fleet fleet);
     //Check if a fleet with given id already exists
     public boolean exists(int id);
}

因此我实现了它

@Service
public class FleetServicesImpl implements FleetServices{

    @Resource
    private FleetRepository fleetRepository;

    @Override
    @Transactional
    public Fleet create(Fleet fleet) {
         return fleetRepository.save(fleet);
    }

    @Override
    @Transactional
    public boolean exists(int id){
        return fleetRepository.exists(id);
    }
}
public interface GeneralRepository<T, Id extends Serializable> extends JpaRepository<T, Id> {
    }
public interface GeneralServices<T,Id> {
    //Create one row into T table, if id already exists this method executes an update
    public T create(T object);
    //Check if a row with given id already exists
    public boolean exists(Id id);
    //Find a row into T table by Id
    public T findById(Id id);
}
public class GeneralServicesImpl<T, Id extends Serializable > implements GeneralServices<T, Id> {

    @Resource
    private GeneralRepository<T,Id> generalRepository;

    @Override
    @Transactional
    public T create(T object) {
        return generalRepository.save(object);
    }

    @Override
    @Transactional
    public boolean exists(Id id) {
        return generalRepository.exists(id);
    }

    @Override
    @Transactional
    public T findById(Id id) {
        return generalRepository.getOne(id);
    }

}
@Service
public class FleetServicesImpl extends GeneralServicesImpl<Fleet, Integer> implements FleetServices  { 
}
@Service

公共类DatabaseServicesImpl实现DatabaseServices{

@Autowired
private FleetServices fleetServices;
@Autowired
private EcuServicesImpl ecuServices;

public DatabaseServicesImpl() {
}

@Override
public void archiveAcquisition() {
    ecuServices.create(new Ecu("MM"));
    Ecu ecuId=ecuServices.findById("MM");
    Fleet fleet=new Fleet(ecuId,"334","2.9",170,"5+","Full","4x2","MT");
    System.out.println(ecuId.getIdEcu());
    fleetServices.create(fleet);
}

}但我得到了这个例外

共有1个答案

弘靖琪
2023-03-14

引用Oliver Gierke(Spring Data项目负责人)的话:

最后一个异常实际上表明JPA设置有问题。“不是托管bean”意味着JPA提供者不知道的类型。如果您正在设置一个基于Spring的JPA应用程序,我建议您在LocalContainerEntityManagerFactory上配置“PackageStoscan”属性,该属性已配置到包含JPA实体的包中。或者,您也可以在persistence.xml中列出所有实体类,但这通常比较麻烦。

确保您的Spring配置设置正确,似乎并不是所有类都被Spring识别。

 类似资料:
  • 是否可以使用Spring数据JPA(以Hibernate作为JPA提供程序为后盾),同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,我无法使用检索当前会话。当我切换到HibernateTransaction管理器时,JPA存储库无法提交更改。 下面是Spring上下文的部分(对于该上下文,我无法使用直接的Hibernate调用): hibernate

  • 问题内容: 是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,无法使用检索当前会话。当我切换到HibernateTransaction Manager时,JPA存储库无法提交更改。 这是我的Spring上下文的一部分(在该上下文中,我无法使用直接的Hibernate

  • 我知道SpringDataJPA使用Hibernate,但是,我有一些问题需要澄清。 > 与使用hibernate会话和HQL相比,使用@Query编写自定义查询有哪些优势? 使用SpringDataJParepository查询方法和使用HibernateHQL之间有什么性能差异吗? 我在这里看到了其他类似的问题,他们没有回答这些问题。

  • 我有一个带有spring Boot(v2.3.3)和spring数据的spring web应用程序。我的评估表包含以下列: Id 我的用例是表中名称和地址的任何更改评估应该创建一个新行,版本以相同的id递增。 因此,基本上只有当地址或姓名更新时,才能在评估表中插入新记录。下面是一个示例: 现有记录: 例如,名称已更新为Ryan,应该有两行,如下所示: 因此,基本上,任何名称和地址的变化都应在评估表

  • 我通过spring数据使用spring boot 1.2.5和Hibernate 4.3.10,我编写了以下代码 我想使用子图,以便在获取名为“content.search”的实体图时检索数据。这是我的密码。 当我指定此行时,它会产生如下错误。(没有此行,它可以正常工作,但不能以EAGER类型检索子图中的数据(可以稍后检索为LAZY) ,@NamedAttributeNode(value=“ite

  • 由于我是审计新手,请让我了解以上问题。 谢谢你。