当前位置: 首页 > 面试题库 >

何时使用Hibernate / JPA / Toplink?

薛博赡
2023-03-14
问题内容

现在,我正在制作一个非常简单的网站-
大约5页。问题是,整合某种类型的数据库映射解决方案是否过时且值得花时间,或者仅使用简单的旧JNDI会更好。我可能需要从数据库中读取/写入很多东西。我想我对这些技术有基本的了解,但是仍然需要大量参考文档。还有其他人面对过这个决定吗?

编辑:抱歉,我应该指定JNDI来查找数据库连接和JDBC以执行操作。


问题答案:

简短的答案:这取决于您要支持的复杂性。

长答案:

首先,ORM(对象关系映射-称为数据库映射-)和JNDI(Java命名和目录接口)是两种不同的事物。

如您所知,第一个用于将数据库表映射到类和对象。第二个是为资源提供查找机制,它们可以是DataSources,Ejb,Queues或其他资源。

也许您的意思是“ JDBC”。

现在,就您的问题而言:如果可能就这么简单,则无需实施ORM。我猜数字表最多大约为5-10,而且操作非常简单。

大概使用纯JDBC就足够了。

如果使用DAO模式,则可以在以后更改它以支持ORM策略(如果需要)。

像这样:假设您有Employee表

您可以使用数据库的所有字段手动创建Employee.java(不应花费太长时间),并使用以下方法创建EmployeeDaO.java:

+findById( id ): Employee
+insert( Employee ) 
+update( Employee )
+delete( Employee ) 
+findAll():List<Employee>

实现非常简单:

select * from employee where id = ?
insert into employee ( bla, bla, bla ) values ( ? , ? , ? )
update etc. etc

当(和如果)您的应用程序变得过于复杂时,您可以更改DAO实现。例如,在“选择”方法中,您可以更改代码以使用执行该操作的ORM对象。

public Employee selectById( int id ) {
      // Commenting out the previous implementation...
      // String query = select * from employee where id = ? 
      // execute( query )

      // Using the ORM solution

       Session session = getSession();
       Employee e = ( Employee ) session.get( Employee.clas, id );
       return e;
}

这只是一个例子,在现实生活中,您可以让表象工厂创建ORM DAO,但这是题外话。关键是您可以从简单开始,通过使用设计模式,可以在以后根据需要更改实现。

当然,如果您想学习技术,甚至可以只用一张桌子就可以开始使用。

一个或另一个(即ORM解决方案)的选择基本上取决于您所使用的技术。例如,对于JBoss或其他开源产品,Hibernate很棒。它是开源的,有很多资源可供学习。但是,如果您使用的是已经具有Toplink的产品(例如oracle应用服务器),或者如果基础已经在Toplink上构建,则应该使用该框架

顺便说一句,自从甲骨文收购BEA以来,他们说他们正在用现在称为“ Oracle Weblogic Application
Server”的toplink替换Kodo(weblogic持久性框架)。

我为您提供了一些资源,您可以在其中获取有关此信息的更多信息:

在这本《企业应用程序体系结构模式》一书中,马丁·福勒(Martin
Fowler)解释了在哪里使用一个或另一个,这里是目录。看一下数据源架构模式与对象关系行为模式:

PEAA目录

DAO(数据访问对象)是核心J2EE模式目录的一部分:

DAO模式

这是Hibernate的入门教程:

hibernate

Toplink的官方页面:

oracle

最后,我“认为” JPA的好主意是您最近可能会更改提供者。

从简单开始,然后发展。

我希望这有帮助。



 类似资料:
  • 问题内容: DISTINCT在JPA中使用哪一列,并且可以更改它? 这是使用DISTINCT的示例JPA查询: 哪一个没有多大意义-区别基于哪个列?是否在Entity上将其指定为注释,因为我找不到注释? 我想指定要区分的列,例如: 我正在使用MySQL和Hibernate。 问题答案: 更新:请参阅投票最多的答案。 我自己的已经过时了。 仅出于历史原因保留在这里。 在Joins中通常需要在HQL中

  • 我试图更好地理解JPA/Hibernate和SQL服务器的注释。 我创建了一个简单的项目:一个名为“Articles”的抽象类。有两个类继承了它:Ramette添加了权重,Pen添加了颜色。下面的代码无效,我无法更正错误。你有什么想法吗?非常感谢。

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

  • 问题内容: 在Hibernate中应如何实现模型类的equals和hashcode?有哪些常见的陷阱?默认实现在大多数情况下是否足够好?使用商务钥匙有什么意义吗? 在我看来,要考虑到延迟获取,ID生成,代理等,在每种情况下都无法正确工作。 问题答案: Hibernate有何时/如何重写一个很好的和长期的描述/ 在文档 要点是,如果您的实体将成为的一部分,或者您要分离/附加其实例,则只需担心它。后者

  • 问题内容: 控制器逻辑: 服务逻辑 怎么了 在90%的情况下,这将正常工作。 问题 我已经阅读了相关问题,并找到了上面看到的电话。它解决了大约50%的案件,但不是全部。 问题答案: 对于我们来说,一些不同的方法最终解决了StaleObjectException定期发生的问题: 检索对象后刷新对象解决了我们的大多数StaleObjectExceptions。尤其是在某人可能会从其他地方处理同一对象并