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

为什么Spring Data Jpa要在simple Select上加入?

夏弘文
2023-03-14

我有@manytoone链接的实体。当我在它上请求类似findByCity时,spring数据会“左外连接”。但是如果我在hibernate上使用条件EQ-它会得到像“select....where city_id=...”这样的普通请求。如何避免在没有@query的情况下加入?

共有1个答案

皇甫智明
2023-03-14

默认情况下,使用@manytoone关系的select总是使用每个定义的join。在Hibernate5标准中,您需要显式地为每个联接创建别名:
,所以不需要编写(Person->Adress):

session.createCriteria(Person.class).
  .add(Restrictions.eq("adress.serial", "42"));

我们需要写信

session.createCriteria(Person.class).
  .createAlias("adress", "adr");
  .add(Restrictions.eq("adr.serial", "42"));

而且createAlias似乎不是完美的方法名,因为is所做的是:

session.createCriteria(Person.class).
  .add(Restrictions.eq("adressId", "42"));
@Entity
@Access(AccessType.FIELD)
public class Person{
    @Id
    String id;

    @JoinColumn(name = "adress_id") 
    @ManyToOne(fetch = FetchType.LAZY)
    @Nullable
    public Adress adress;


    @Column(name = "adress_id", insertable = false, updatable = false)
    private String adressId;
}


@Entity
@Access(FIELD)
public class Adress{
    @Id
    String id;
}
 类似资料:
  • 似乎自从我们将tomcat升级到Version8+后,我们在启动时就会重新加载上下文。然而,这似乎只发生在我们的开发环境中(带有eclipse和Tomcat8.5的windows OS)。我们的生产环境(带有Tomcat8.5的linux OS)不存在此问题。我把它贴在下面,但我没有看到任何迹象表明为什么会发生这样的tomcat日志。我知道这是正常的行为,在web应用程序目录中的一些东西被改变,但

  • 问题内容: 我在网上研究过immutablejs的好处,但是没有发现任何令人满意的东西! 我的问题是,当我可以冻结一个普通的旧javascript对象时,为什么我应该使用该库并使用非本机数据结构? 问题答案: 我认为您不了解immutablejs提供的功能。这不是一个使您的对象变得不可变的库,而是一个使用不可变值的库。 在不简单重复他们的文档和任务说明的情况下,我将说明它提供的两件事: 类型。他们

  • 问题内容: 我玩了一段时间我的代码,这不是关于错误或任何东西,但我只是不明白为什么main()类不需要初始化就可以运行… 但是,是的,非常感谢您的阅读。 问题答案: 与许多其他语言不同,类主体是Python中的可执行语句,并在解释器到达该行后立即执行。当您运行此“程序”时: 它只是打印“嘿”而没有创建任何对象。 这同样适用于函数定义语句(但不适用于函数体)。运行此命令时: 它显示“ hi”,但不显

  • 问题内容: 当引用类变量时,为什么人们要在它前面加上?我不是在谈论什么时候用于区分方法参数,而是在看起来没有必要的时候。 例: 在其中,为什么不仅仅引用为? 什么买什么? 这是一个其代码已在前面的stackoverflow问题。 问题答案: 某些人喜欢在私有数据成员之前添加“ m_”或名称接口“ IFoo”的原因相同。他们认为它提高了可读性和清晰度。您是否同意这样的约定是一个品味问题。

  • 问题内容: 为什么要在上使用pip?难道不是PyPI和程序包作者最主要的原因吗?如果作者将废话源tarball(例如:丢失的文件,没有)上传到PyPI,则pip和都会失败。除了外观上的差异外,为什么Python的人(如上述推文中)似乎强烈青睐pip而不是? (假设我们正在谈论由社区维护的Distribute软件包中的) 问题答案: 这里的许多答案在2015年已经过时了(尽管丹尼尔·罗斯曼最初接受的

  • 问题内容: 我的用例需要一个数据结构。我应该能够将项目推送到数据结构中,而我只想从堆栈中检索最后一个项目。该堆栈的JavaDoc说: Deque接口及其实现提供了一组更完整和一致的LIFO堆栈操作,应优先使用此类。例如: 我绝对不希望这里出现同步行为,因为我将使用方法本地的数据结构。除了这个,我为什么还要在这里呢? PS:Deque的Javadoc说: 双端队列也可以用作LIFO(后进先出)堆栈。