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

Spring JPA数据仓库

康鹏云
2023-03-14

我正在努力让Spring JPA Data为我工作,但一直在努力。问题出在这里。

我有两个域类,它们之间有一个简单的一对多关系:

class Card {
    @ManyToOne(mappedBy="user")
    private User user;
}

class User {
     @OneToMany
     private List<Card> cards;
}

我已经为每个类设置了存储库接口:CardRepository,扩展JpaRepository的用户存储库,两个存储库都注入到服务中

@Service
@Transactional(readOnly = true)
class Service {
  @Autowired
  CardRepository repo1;
  @Autowired
  UserRepository repo2;

  public void someMethod() {
      // make use of the repos
      User u=repo2.findByIdentifier("ID1");
      List<Card> cards = u.getCards();
      //do something with the cards will throw lazyinitialization exception.
  }
}

非常基本的设置。someMethod() 出现问题,其中我用它的标识符查询了一个用户,然后尝试获取映射@OneToMany的列表,然后发生了 LazyInitialization 异常。

我不太确定我是否错过了那里的东西?似乎只要返回存储库的方法,实体管理器就关闭了;如果是这种情况,我想知道如何在不定义其他存储库方法的情况下获得关系?

然而,如果我将@OneTo多的获取设置为渴望,没问题,但这是我真的不想做的事情。

存储库的 delete() 似乎也有问题。如果我先删除一张卡,然后尝试删除()它的拥有用户(其列表中仍有该卡),删除将失败,抱怨找不到该卡。但我没有设置从用户到卡的任何删除传播!

我希望有人可以解释如何在 JpaRepository 中使用实体管理器,这似乎使 Jpa 编程更加困难。我知道所有存储库都是自动生成的,但如果有人可以指出它们是如何实现的,那将非常有帮助。

谢谢,武东

共有1个答案

苏鸿卓
2023-03-14

首先,映射标签需要互换,即

class User(){
 @OneToMany(mappedBy="user")
 private List<Card> cards;
}

class Card{
@ManyToOne
private User user;
}

你是如何调用你的某个方法的?如果它是在init-方法中调用的,您将无法使用@Transactionic

 类似资料:
  • 我试图构建一个基于wicket、Spring jpa存储库和MySQL的应用程序。 问题是,我的Service类只是不想自动配线。如果我想使用自动配线的类,我有一个空指针异常。 事实上,我得到了双空指针:我的BaseServiceConfig。java不会自动连接实现,itnerface中的自动连接存储库也为空。所以,问题是为什么。 我试图用最少甚至没有xml的方式实现这一点,所有的配置都是在ja

  • 我仍然是java和spring的初学者,我已经在mysql中存储了一个名为< code>Offers的表,我试图逐行获取数据< code >其中Status == 0,我的表看起来像这样: 当我尝试运行我的代码时,它的返回 org.springframework.beans.factory。BeanCreationException:创建在类路径资源[org/springframework/boo

  • 在使用Spring数据存储库时发现一些奇怪的行为。 我写了这些类和接口: 当我尝试测试UserRepositoryImpl时,java。lang.StackOverflowerr被抛出 我发现save()方法存在一些问题。此外,delete()方法会引发stackoverflow。 我已经找到了解决办法。当我更改将存储库接口扩展为(例如)JpaUserRepository的接口的名称时,我的问题就

  • 主要内容:1.离线数仓,2.Lambda架构,3.Kappa架构,4.Smack架构,5.湖仓一体传统数仓 离线数仓 实时数仓 Lambda架构 Kappa架构 Smack架构 数据湖架构 仓湖一体架构 1.离线数仓 2.Lambda架构 Lambda架构是大数据平台里最成熟、最稳定的架构,它的核心思想是:将批处理作业和实时流处理作业分离,各自独立运行,资源互相隔离。 (1)Batch Laye:主要负责所有的批处理操作,支撑该层的技术以Hive、Spark-SQL或MapReduce这类批处

  • 英文自我介绍和项目介绍 Good Afternoon, my name is Wang Longjiang,graduated from Anhui University. I have been working in the Institute of Aerospace Information, Chinese Academy of Sciences for two years. Focus o

  • 主要内容:1.ETL,2.ELT,3.ELT的演变,4.ELT的工作原理,5.什么时候我们选择ELT,6.数据湖是不是很好的ELT落脚点,7.总结ETL 和 ELT 有很多共同点,从本质上讲,每种集成方法都可以将数据从源端抽取到数据仓库中,两者的区别在于数据在哪里进行转换 1.ETL ETL - 抽取、转换、加载 从不同的数据源抽取信息,将其转换为根据业务定义的格式,然后将其加载到其他数据库或数据仓库中。另一种 ETL 集成方法是反向 ETL,它将结构化数据从数据仓库中加载到业务数据库中,如我们