Tag: hibernate

用Hibernate和MySQL创build时间戳和上次更新时间戳

对于某个Hibernate实体,我们需要存储它的创build时间和最后一次更新的时间。 你将如何devise这个? 你会在数据库中使用哪些数据types(假设MySQL可能与JVM在不同的时区)? 数据types是否可以识别时区? 你会在Java中使用哪些数据types( Date , Calendar , long ,…)? 你会负责设置时间戳 – 数据库,ORM框架(Hibernate)还是应用程序员? 你会用什么注释来进行映射(例如@Temporal )? 我不仅在寻找一个可行的解决scheme,而且还需要一个安全和devise良好的解决scheme。

Hibernate SessionFactory与EntityManagerFactory

我是Hibernate的新手,并不清楚是使用SessionFactory还是EntityManagerFactory来获取hibernate会话。 两者有什么区别? 优点缺点?

如何使用Hibernate打印带有参数值的查询string

是否有可能在Hibernate打印生成的SQL查询真正的价值而不是问号? 如果用Hibernate API不可能的话,你会如何build议打印带有实际值的查询?

创build完美的JPA实体

我一直在使用JPA(实现Hibernate)一段时间,每次我需要创build实体时,我发现自己正在与AccessType,不可变属性,equals / hashCode …等问题挣扎。 所以我决定尝试找出每个问题的一般最佳做法,并写下来供个人使用。 我不介意任何人对此发表评论,或者告诉我我错在哪里。 实体类 实现Serializable 原因: 规范说你必须,但是一些JPA提供者不执行这个。 作为JPA提供程序的Hibernate不强制执行此操作,但如果尚未实现Serializable,则它可能会在ClassCastException的深处发生故障。 构造函数 用实体的所有必填字段创build一个构造函数 原因:构造函数应该始终保持创build的实例处于正常状态。 除了这个构造函数:有一个包私有默认的构造函数 原因:默认的构造函数需要Hibernate初始化实体; 私有是允许的,但包私有(或公共)可见性是需要的运行时代理生成和有效的数据检索没有字节码工具。 字段/属性 一般情况下使用字段访问,需要时使用属性访问 理由:这可能是最值得商榷的问题,因为没有一个明确而有说服力的论据(财产准入和实地准入); 然而,由于代码更清晰,封装更好,并且不需要为不可变字段创buildsetter,所以字段访问似乎是最受欢迎的 省略set不可变字段(访问types字段不需要) 物业可能是私人的 原因:我曾经听说受保护对于(Hibernate)性能更好,但是我可以在网上find的是: Hibernate可以直接访问公共,私有和受保护的访问方法以及公共,私有和受保护的字段。 这个select取决于你,你可以匹配它来适应你的应用程序devise。 等于/的hashCode 如果仅在持久化实体时才设置此ID,请勿使用生成的ID 优先:使用不可变的值形成一个唯一的业务密钥,并用它来testing相等性 如果唯一的业务密钥不可用,则使用在初始化实体时创build的非暂时性UUID ; 看到这个伟大的文章更多的信息。 从不涉及相关实体(ManyToOne); 如果此实体(如父实体)需要成为业务密钥的一部分,则仅比较该ID。 只要你使用属性访问types ,在代理上调用getId()将不会触发实体的加载。 示例实体 @Entity @Table(name = "ROOM") public class Room implements Serializable { private static final long serialVersionUID = 1L; @Id […]

T-SQL中的睡眠命令?

有没有办法写一个T-SQL命令,让它睡一段时间? 我正在asynchronous编写Web服务,我希望能够运行一些testing来查看asynchronous模式是否真的能够使其更具可伸缩性。 为了“模拟”一个很慢的外部服务,我希望能够用一个运行速度很慢的脚本调用一个SQL服务器,但实际上并没有处理大量的东西。

对象引用未保存的瞬态实例 – 在刷新之前保存瞬态实例

我使用Hibernate保存对象时收到以下错误 object references an unsaved transient instance – save the transient instance before flushing

如何使用REST API进行身份validation? (浏览器+本机客户端)

我正在使用Rails构build一个Web应用程序。 目前,我正在使用HTTP会话的devise很容易设置,它运作良好。 该应用程序由一个提供AJAX Web应用程序的URL组成。 其余的可用URL属于REST API。 所以,一切和每一个小数据请求都是通过AJAX完成的。 现在我想扩展整个事情来支持本地客户端。 我读了很多关于无状态身份validation,http基本和摘要auth,http会话,cookie,xsrf等等。现在我觉得我不能有一个安全的应用程序,因为总有办法劫持它的一些部分。 1 .: HTTP会话比。 无状态身份validation令牌 有什么不同? 我不明白。 HTTP会话: 客户端请求一个URL(第一个请求到服务器) 服务器给出正常的响应加上一些唯一的string(==会话ID) 客户端必须发送这个string与每个请求(这是使用HTTP标头自动完成) 客户端login – >服务器记住这个特定的会话ID现在login 客户端访问一个页面,需要auth – >没有特别的事情做,因为会话ID将自动通过HTTP头部发送到服务器 无状态身份validation令牌: 客户端请求URL(对服务器的第一个请求) 服务器只是给出正常的响应, 没有任何密钥或令牌或ID (这里没什么特别的) 客户端login – >服务器创build一个授权令牌,并将该令牌发送给响应中的客户端 客户端访问页面,需要身份validation – >客户端必须提交身份validation令牌 对我来说这两种方式看起来都很相似 使用Rails,我还可以select将会话存储在数据库中… Devise将使用无状态身份validation令牌。 2:authentication方法 现在我用{"user":{"email":"e@mail.com","password":"p455w0rd"}}使用POST /users/sign_in 。 但是还有其他的可能性,比如HTTP基本authentication和HTTP摘要authentication,还有像oAuth这样的解决scheme(对我来说太大了)。 从我读过的内容来看: 关于sign_in安全性,当前的POST /users/sign_in和HTTP基本authentication之间没有区别。 两者都使用明文。 对于sign_out HTTP基本身份validation有一个缺点:退出只能closures浏览器窗口 HTTP摘要authentication有一个巨大的优势:它根本不传输密码(只是密码和随机生成的string散列) (德文)维基百科说:所有浏览器都不支持HTTP摘要authentication。 也许这个信息是老路? 我需要的: 用户名和哈希密码(bcrypt)存储在数据库中。 […]

使用Spring和Hibernate跨多个数据库进行分布式事务的“最佳”方式是什么?

我有一个应用程序 – 更像是一个实用程序 – 位于一个angular落,并定期更新两个不同的数据库。 这是一个有点独立的应用程序,已经build立了一个Spring应用程序上下文。 上下文中configuration了两个Hibernate Session Factories,然后使用Spring中configuration的Commons DBCP数据源。 目前没有交易pipe理,但是我想补充一些。 对一个数据库的更新取决于对另一个数据库的成功更新。 该应用程序不在Java EE容器中 – 它由从shell脚本调用的静态启动器类引导。 启动器类实例化应用程序上下文,然后在其一个bean上调用一个方法。 在数据库更新中使用事务性的“最佳”方法是什么? 我会把“最好”的定义留给你,但我认为它应该是“容易设置”,“容易configuration”,“便宜”和“容易打包和重新分配”等function。 自然,FOSS会很好。

JPA 2.0:自动将实体类从不同的jar *添加到PersistenceUnit *

我有一个Maven构build的基于CDI的Java SE应用程序,它有一个核心模块和其他模块。 核心有persistence.xml和一些实体。 模块有额外的实体。 我如何将实体添加到持久性单元的聚光灯下? 我已阅读Hibernate手册, http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/configuration.html#setup-configuration-packaging 我也看到了这些问题 如何合并/扩展来自不同JAR的持久化单元? 在persistence.xml之外定义jpa实体类 使用JPA 2.0编程加载实体类? 我正在寻找一个解决scheme,Hibernate可以扫描所有加载的类,或者从其他jar文件中获取一些configuration文件(比如CDI用beans.xml )。 我的应用程序不使用Spring。 我不坚持可移植性 – 我会坚持使用Hibernate。 有没有这样的解决scheme? 有没有办法从persistence.xml创build一个PU,并以编程方式添加类? EntityManagerFactory创build后可以添加@ Entity类吗? 更新:我在org.​hibernate.​ejb.​Ejb3Configurationfind了org.​hibernate.​ejb.​Ejb3Configuration : public Ejb3Configuration configure(String persistenceUnitName, Map integration) http://docs.jboss.org/hibernate/entitymanager/3.6/javadocs/

指定索引(非唯一键)使用JPA

如何定义一个字段,例如使用JPA注释将email定义为索引。 我们在email上需要一个非唯一的密钥,因为每天在这个字段上有几百万个查询,而且没有密钥有点慢。 @Entity @Table(name="person", uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"})) public class Person { // Unique on code and uid public String code; public String uid; public String username; public String name; public String email; } 我已经看到一个冬眠特定的注释,但我试图避免供应商的具体解决scheme,因为我们仍然决定hibernate和数据核心之间。 更新: 从JPA 2.1开始,你可以做到这一点。 请参阅: 此位置不允许使用注释@Index