标签: orm

ORM(对象关系映射)中的"N + 1选择问题"是什么?

"N + 1选择问题"通常被称为对象关系映射(ORM)讨论中的一个问题,我理解它必须为对象中看起来很简单的事情做出大量的数据库查询.世界.

有没有人对这个问题有更详细的解释?

orm select-n-plus-1

1507
推荐指数
16
解决办法
37万
查看次数

JPA和Hibernate有什么区别?

我知道JPA 2是一个规范,Hibernate是ORM的工具.另外,我知道Hibernate比JPA 2有更多的功能.但从实际的角度来看,真正的区别是什么?

我有使用iBatis的经验,现在我正在尝试学习Hibernate或JPA2.我选了Pro JPA2书,它一直指的是"JPA提供者".例如:

如果您认为某个功能应该标准化,那么您应该说出来并向您的JPA提供商索取

这让我很困惑,所以我有几个问题:

  • 单独使用JPA2可以通过简单地注释我的POJO来从DB中获取数据
  • JPA2是否应该与"JPA Provider"一起使用,例如TopLink或Hibernate?如果是这样,那么使用JPA2 + Hibernate与单独使用JPA2相比有什么好处,或者与单独的Hibernate相比?
  • 你能推荐一本好的实用JPA2书吗?"Pro JPA2"似乎更像是JPA2上的圣经和参考(直到本书的后半部分才进入查询).有没有一本书对JPA2采取问题/解决方案?

java orm hibernate jpa java-ee

681
推荐指数
10
解决办法
49万
查看次数

object引用未保存的瞬态实例 - 在刷新之前保存瞬态实例

使用Hibernate保存对象时收到以下错误

object references an unsaved transient instance - save the transient instance before flushing
Run Code Online (Sandbox Code Playgroud)

java orm hibernate

546
推荐指数
14
解决办法
55万
查看次数

Java Persistence API中FetchType LAZY和EAGER之间的区别?

我是Java Persistence API和Hibernate的新手.

Java Persistence API FetchType.LAZY和之间的区别是什么FetchType.EAGER

java orm hibernate jpa java-persistence-api

512
推荐指数
12
解决办法
44万
查看次数

使用JPA @OneToMany关联时@JoinColumn和mappedBy之间有什么区别

有什么区别:

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY)
    @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId")
    private List<Branch> branches;
    ...
}
Run Code Online (Sandbox Code Playgroud)

@Entity
public class Company {

    @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef")
    private List<Branch> branches;
    ...
}
Run Code Online (Sandbox Code Playgroud)

java orm hibernate jpa one-to-many

483
推荐指数
7
解决办法
46万
查看次数

Hibernate显示真正的SQL

如果我订

<property name="show_sql">true</property>
Run Code Online (Sandbox Code Playgroud)

在我的控制台的hibernate.cfg.xml配置文件中,我可以看到SQL.

但它不是真正的 SQL ......我能看到将直接传递给数据库的SQL代码吗?

例:

我知道了

select this_.code from true.employee this_ where this_.code=?
Run Code Online (Sandbox Code Playgroud)

我可以看吗

select employee.code from employee where employee.code=12
Run Code Online (Sandbox Code Playgroud)

真正的 SQL?

java sql orm hibernate

384
推荐指数
4
解决办法
47万
查看次数

Jackson JSON和Hibernate JPA问题的无限递归

在尝试将具有双向关联的JPA对象转换为JSON时,我不断获取

org.codehaus.jackson.map.JsonMappingException: Infinite recursion (StackOverflowError)
Run Code Online (Sandbox Code Playgroud)

我找到的只是这个线程,基本上建议避免双向关联.有没有人对这个春天的bug有一个解决方法?

------编辑2010-07-24 16:26:22 -------

Codesnippets:

业务对象1:

@Entity
@Table(name = "ta_trainee", uniqueConstraints = {@UniqueConstraint(columnNames = {"id"})})
public class Trainee extends BusinessObject {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "name", nullable = true)
    private String name;

    @Column(name = "surname", nullable = true)
    private String surname;

    @OneToMany(mappedBy = "trainee", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @Column(nullable = true)
    private Set<BodyStat> bodyStats;

    @OneToMany(mappedBy = "trainee", fetch = FetchType.EAGER, …
Run Code Online (Sandbox Code Playgroud)

java orm json spring-mvc jackson

375
推荐指数
15
解决办法
26万
查看次数

使用Hibernate时如何使用参数值打印查询字符串

在Hibernate中是否可以使用实际值而不是问号来打印生成的SQL查询?

如果使用Hibernate API无法打印具有实际值的查询,您会建议如何?

java sql orm hibernate

370
推荐指数
11
解决办法
32万
查看次数

将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

我有一个包含5列的数据表,其中一行填充数据,然后通过事务保存到数据库.

保存时,会返回错误:

将datetime2数据类型转换为日期时间数据类型会导致超出范围的值

这意味着,正如所读,我的数据表有一种类型DateTime2和我的数据库a DateTime; 那是错的.

日期列设置为DateTime如下所示:

new DataColumn("myDate", Type.GetType("System.DateTime"))

这可以在代码中解决,还是必须在数据库级别上进行更改?

c# sql-server orm datetime entity-framework

356
推荐指数
10
解决办法
34万
查看次数

单元测试数据库驱动的应用程序的最佳策略是什么?

我使用很多Web应用程序,这些应用程序由后端不同复杂程度的数据库驱动.通常,存在与业务和表示逻辑分离的ORM层.这使得对业务逻辑的单元测试相当简单; 事物可以在离散模块中实现,测试所需的任何数据都可以通过对象模拟来伪造.

但是测试ORM和数据库本身一直充满了问题和妥协.

多年来,我尝试了一些策略,其中没有一个完全满足我.

  • 使用已知数据加载测试数据库.针对ORM运行测试并确认正确的数据返回.这里的缺点是您的测试数据库必须跟上应用程序数据库中的任何模式更改,并且可能会不同步.它还依赖于人工数据,并且可能不会暴露由于愚蠢的用户输入而发生的错误.最后,如果测试数据库很小,它将不会显示缺失索引等低效率.(好吧,最后一个不是真的应该使用单元测试,但它没有受到伤害.)

  • 加载生产数据库的副本并对其进行测试.这里的问题是你可能不知道在任何给定时间生产数据库中有什么; 如果数据随时间变化,您的测试可能需要重写.

有些人指出,这两种策略都依赖于特定的数据,单元测试应该只测试功能.为此,我见过建议:

  • 使用模拟数据库服务器,并仅检查ORM是否正在发送正确的查询以响应给定的方法调用.

您使用了哪些策略来测试数据库驱动的应用程序?什么对你有用?

database orm unit-testing mocking

331
推荐指数
5
解决办法
9万
查看次数