Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 类可以同时注释为@Repository和@Entity吗?_Java_Spring_Hibernate_Orm - Fatal编程技术网

Java 类可以同时注释为@Repository和@Entity吗?

Java 类可以同时注释为@Repository和@Entity吗?,java,spring,hibernate,orm,Java,Spring,Hibernate,Orm,我刚开始冬眠。我无法理解这些简单的逻辑。我知道Spring使用@Repository访问对象。此外,Hibernate使用@Entity表示映射到数据库表中的实体。我只是想知道一个类是否可以同时使用@Repository和@Entity进行注释,因为它们或多或少暗示了相同的含义。否 Hibernate实体由Hibernate ORM框架管理,当您通过get()或load()访问它们时,它们(及其代理)由Hibernate创建。它们的生命周期与SpringBean完全不同(也很复杂)(可以附加/分

我刚开始冬眠。我无法理解这些简单的逻辑。我知道Spring使用@Repository访问对象。此外,Hibernate使用@Entity表示映射到数据库表中的实体。我只是想知道一个类是否可以同时使用@Repository和@Entity进行注释,因为它们或多或少暗示了相同的含义。

Hibernate实体由Hibernate ORM框架管理,当您通过get()或load()访问它们时,它们(及其代理)由Hibernate创建。它们的生命周期与SpringBean完全不同(也很复杂)(可以附加/分离/代理/挂起以进行删除)

Spring存储库是单例的,由Spring框架管理。通常,只要容器实例存在,它们就存在。新的Hibernate会话可能会被打开和关闭,新的用户会话可能会参与,然后会过期,但仍然会有相同的存储库单例实例

有关可能的休眠对象状态,请参阅

对于存储库实例,它们通常是无状态的,因为它们是服务

回复:
它们或多或少意味着相同。
不,它们不一样。有

有多少C++程序员需要更换灯泡?你是 仍在按程序思考。设计合理的灯泡物体 将从泛型灯泡类继承change方法,因此 你要做的就是发送一个灯泡更换信息

但好的OOP程序员不这样认为,根据对象应该有一个改变的理由。存储库与基础架构一起工作,和业务规则无关。基础结构可能会发生变化(例如,您可能需要将对象存储在XML而不是RDBMS中),但这不应影响封装业务对象状态的类

您可以通过从实体类引用抽象存储库接口来缓解此问题(实现一个臭名昭著的模式-这就像从灯泡引用某个抽象灯泡插座,这似乎不是一个好的解决方案,因为灯泡插座和灯泡具有不同的生命周期)


这就是原则开始发挥作用的地方,根据这一点,一个对象(其作用是反映模型的抽象)执行一些完全不相关的事情,如持久性或通过网络传输,是不合逻辑的。当
Student
类将有
print()
saveToXml()
transmitbyhtp()
方法时,这很奇怪

它们根本不是同一回事

@实体

@Entity是在您的业务领域中表示“事物”的东西。它可以是任何东西——顾客、大象、产品。它将具有将持久化到数据库的属性以及与这些属性相关的方法(至少应该是这样,除非它是一个贫乏的实体,但这是一个反模式…稍后,当您熟悉基本知识时,请查看Spring的@Configurable注释-这允许您为您的实体提供协作者).

@Repository

另一方面,@Repository提供了检索和存储这些实体的接口


有一些框架,特别是在其他语言中,将持久性和实体属性组合在同一个对象上,但是这在Java/Hibernate/Spring中并不常见

否(这是最小注释长度)听起来像ActiveRecord;)听起来像是违反了单一责任原则。@SpaceTrucker-我想它在Ruby中很受欢迎,因为它有混合插件和duck类型,所以它并没有真正扰乱实体界面。另一个答案有很多好的信息,但这更简洁、切中要害,所以它得到了我的投票。