Tag: orm

Hibernate – 自定义插入数据库

我写这篇文章知道是否有人知道如何做到这一点: 我想做这个插入: INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,’cdp’)) Crypt是存储在我的数据库中的函数,我希望在我的代码中执行插入操作。 实际上,当我想在数据库中插入一些东西时,我使用: getHibernateTemplate().persist(obj); 但我想做一个“自定义”插入,因为我需要使用该function。 我正在使用hibernate +注释: @org.hibernate.annotations.SQLInsert (sql = “INSERT INTO TABLA (CAMPO1, CAMPO2) VALUES (?, crypt(?,’cdp’))”) 但是必须从文件中读取密钥“cdp”,因此该解决方案对我不起作用。 我想在我的代码上使用一个方法来执行SQL查询(INSERT查询)

保持JPA EntityManager打开?

我正在学习JPA,示例中的一般模式似乎如下: EntityManager em = factory.createEntityManager(); em.getTransaction().begin(); // …. em.getTransaction().commit(); em.close(); 现在我想知道为什么我们不断创建和关闭EntityManagers,而不是保持开放并且只是开始新的交易? 保持开放与关闭它的好处和成本是什么?

使用JPA和Hibernate时@Size,@ Longth和@Column(length = value)之间的区别

以下三个字段的validation检查有什么区别? @Entity public class MyEntity { @Column(name = “MY_FIELD_1”, length=13) private String myField1; @Column(name = “MY_FIELD_2”) @Size(min = 13, max = 13) private String myField2; @Column(name = “MY_FIELD_3”) @Length(min = 13, max = 13) private String myField3; // getter & setter } 我读到第一个与DDL的东西有关。 第二个是beanvalidation。 第三个是用于hibernatevalidation。 那是对的吗? 我还不明白的是:我什么时候需要使用哪一个? 这些注释中的一个何时触发? 编辑:考虑以下情况:鉴于需要开发一个具有长度为13的字符串类型字段的实体。您会选择上述哪种方法? 甚至更好:你有哪些问题要问自己找出哪一个适合你的目的?

检查hibernate映射类中的不变量

使用hibernate的一个挑战是,manged类必须有一个默认的构造函数 。 问题是没有明确的点来初始化类并且可以检查不变量。 如果一个类具有依赖于多个属性的不变量,则类设计变得复杂。 让我们从假设的绿地设计开始: public class A { private int x; private int y; public A(int x, int y) { this.x = x; this.y = y; checkInvariants(this.x, this.y); } private void checkInvariants(int x, int y) { if (x + y « 0) throw new IllegalArgumentException(); } } 这是不符合hibernate要求的基本实现。 在构造函数中检查不变量。 (checkInvariants()方法的内容并不重要,它仅用于说明类不变量可以依赖于多一个属性。) 该类可以使用如下: new A(0, 0); […]

使用nolock进行Java Hibernate HQL查询

有没有办法运行这些查询,好像我添加了一个(NOLOCK)提示?

Hibernate @LazyCollection注释的用途是什么?

我有2个实体作为父和子作为OneToMany关系 @Entity public class Parent { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; @OneToMany(mappedBy = “parent”, fetch = FetchType.LAZY) @IndexColumn(name = “index”, base = 1) @Cascade(org.hibernate.annotations.CascadeType.ALL) @LazyCollection(LazyCollectionOption.EXTRA) private List childs = new ArrayList(); // getter and setter } 那么这里有什么用@LazyCollection(LazyCollectionOption.EXTRA)以及什么时候会出现在图片中,比如哪个操作带有子列表,这将是有益的?

Hibernate将对象保存到多个会话

我试图使用hibernate写入多个数据库。 我在单个会话对象中封装了写入和读取/写入会话。 但是,当我去保存时,我收到很多错误,表明对象已经与另一个会话相关联:“非法尝试将集合与两个打开的会话相关联” 这是我的代码: public class MultiSessionObject implements Session { private Session writeOnlySession; private Session readWriteSession; @Override public void saveOrUpdate(Object arg0) throws HibernateException { readWriteSession.saveOrUpdate(arg0); writeOnlySession.saveOrUpdate(arg0); } } 我试过驱逐物体并冲洗; 但是,这会导致“Row被另一个事务更新或删除”的问题……即使两个会话都指向不同的数据库。 public class MultiSessionObject implements Session { private Session writeOnlySession; private Session readWriteSession; @Override public void saveOrUpdate(Object arg0) throws HibernateException { readWriteSession.saveOrUpdate(arg0); readWriteSession.flush(); readWriteSession.evict(arg0); writeOnlySession.saveOrUpdate(arg0); writeOnlySession.flush(); […]

hibernate的替代品

对于像http://vimeo.com/28885655这样的程序员来说,什么是最好的解决方案 创建video的人相信 在许多情况下,hibernate是过度的 基本的sql是一种很好的语言,hibernate抽象了很多 我听说过其他一些ORM实现 https://github.com/rufiao/persist http://ormlite.com/ http://www.simpleorm.org/ 我想听听他们如何比较以及每个人的优缺点是什么。

jpa将儿童从收集中删除

我在我的网络应用程序中使用JPA而不是Hibernate。 这是两个实体(仅显示getter): class Child { 私人父母; @ManyToOne(可选=假) @JoinColumn(name =“parent_id”,referencedColumnName =“parent_id”,nullable = false,updatable = false) public Parent getParent(){ 回归父母; } } class Parent { 私人收集儿童; @OneToMany(fetch = FetchType.EAGER,mappedBy =“parent”,cascade = {CascadeType.ALL}) public Collection getChildren(){ 回归孩子; } } 如您所见, Parent与Child关系为“一对多”。 现在我需要加载一个Parent实例,删除部分或全部子项并保存更改。 以下代码对我不起作用: 父p = entityManager.find(Parent.class,12345L); //加载实体 p.getChildren()清除()。 //删除所有孩子 entityManager.merge(P); //尝试保存 在上面的示例中未删除子实体。 现在我必须为每个子entityManager.remove()手动调用entityManager.remove() 。 有没有更简单的方法来管理儿童collections? 请注意,我不想使用特定于Hibernate的function,只有纯JPA。 问候,安德烈

如何在unit testing期间注入PersistenceContext?

这是我的java类: public class Finder { @PersistenceContext(unitName = “abc”) EntityManager em; public boolean exists(int i) { return (this.em.find(Employee.class, i) != null); } } 这是unit testing: public class FinderTest { @Test public void testSimple() { Finder f = new Finder(); assert(f.exists(1) == true); } } 由于Finder.em未被任何人注入,因此测试因NullPointerException失败。 我应该如何妥善处理这种情况? 有没有最佳实践?