Tag: hibernate

禁用上下文LOB创build为createClob()方法抛出错误

我正在使用Oracle 10g的Hibernate 3.5.6。 我在初始化过程中看到下面的exception,但应用程序本身工作正常。 这个exception的原因是什么? 以及如何纠正? 例外 禁用上下文LOB创build为createClob()方法抛出错误: java.lang.reflect.InvocationTargetException 信息 Oracle版本:Oracle数据库10g企业版版本10.2.0.4.0 JDBC驱动程序:Oracle JDBC驱动程序,版本:11.1.0.7.0

使用Hibernate注释的文本字段

我有麻烦设置一个string的types,它像 public void setTextDesc(String textDesc) { this.textDesc = textDesc; } @Column(name="DESC") @Lob public String getTextDesc() { return textDesc; } 它没有工作,我检查了mysql模式,它仍然是varchar(255),我也试过了, @Column(name="DESC", length="9000") 要么 @Column(name="DESC") @Type(type="text") 我正在尝试使types为文本,任何想法将不胜感激!

在@Test之后回滚事务

首先,我在StackOverflow上发现了很多关于这个的线程,但是他们没有一个真的帮助我,所以很抱歉要问可能重复的问题。 我使用spring-test运行JUnittesting,我的代码看起来像这样 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {}) public class StudentSystemTest { @Autowired private StudentSystem studentSystem; @Before public void initTest() { // set up the database, create basic structure for testing } @Test public void test1() { } … } 我的问题是,我想我的testing不影响其他testing。 所以我想为每个testing创build一些回滚。 我为此搜寻了很多,但到目前为止我还没有发现任何东西。 我为此使用Hibernate和MySql

JPA映射:“QuerySyntaxException:foobar未映射…”

我一直在玩一个非常简单的JPA例子,并试图调整它到一个现有的数据库。 但是我不能通过这个错误。 (下面)这只是一些简单的事情,我没有看到。 org.hibernate.hql.internal.ast.QuerySyntaxException: FooBar is not mapped [SELECT r FROM FooBar r] org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93) 在下面的DocumentManager类(一个简单的servlet,因为这是我的目标)做两件事情: 插入一行 返回所有行 插入工作完美 – 一切都很好。 问题在于检索。 我已经尝试了Query q = entityManager.createQuery参数的各种值,但没有运气,我已经尝试了各种更明确的类注解(如列types),都没有成功。 请救我自己。 我确定这是一个小事。 我对JPA的经验不足使我无法继续前进。 我的./src/ch/geekomatic/jpa/FooBar.java文件: @Entity @Table( name = "foobar" ) public class FooBar { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="id") private int id; @Column(name="rcpt_who") private String rcpt_who; @Column(name="rcpt_what") private String rcpt_what; […]

与JPA Kotlin:默认构造函数地狱

按照JPA的要求,@ @Entity类应该有一个默认的(非arg)构造函数来从数据库中检索对象时实例化对象。 在Kotlin中,属性在主构造函数中声明非常方便,如下例所示: class Person(val name: String, val age: Int) { /* … */ } 但是,当非参数构造函数被声明为次要构造函数时,它需要传递主构造函数的值,所以需要一些有效的值,如下所示: @Entity class Person(val name: String, val age: Int) { private constructor(): this("", 0) } 如果这些属性比String和Int有更复杂的types,并且它们是不可空的,那么为它们提供值看起来完全不好,尤其是当主构造函数和init块中有很多代码,并且参数是积极使用 – 当它们被重新分配时,大部分代码将被重新执行。 而且, val -properties不能在构造函数执行后重新分配,所以不可变性也会丢失。 所以问题是:Kotlin代码如何适应与JPA无代码重复,select“魔术”的初始值和不可变性的损失? PS除了JPA,Hibernate是否可以构造没有默认构造函数的对象呢?

什么是JPA中使用的referencedColumnName?

在JPA中有一个名为referencedColumnName的属性,可以在@JoinColumn, @PrimaryKeyJoinColumn设置,这个设置背后的想法是什么,有人能给出一个很好的例子来说明这个可以使用的地方吗?

在@Column JPA annontation上设置length属性时会做些什么?

在JPA中设置列的长度到底是什么? @Column(name = "middle_name", nullable = false, length = 32) public String getMiddleName() { return this.middleName; } 我知道你可以使用注释来生成基于实体对象的数据库模式(DDL),但是当持久化发生时长度会做任何types的检查或截断,或者它仅用于模式创build? 我也意识到,JPA可以坐在各种实现的顶部,在这种情况下我所关心的实现是Hibernate。

hibernate一对一:getId()而不提取整个对象

我想获取一对一关系的id而不加载整个对象。 我想我可以使用延迟加载,如下所示: class Foo { @OneToOne(fetch = FetchType.LAZY, optional = false) private Bar bar; } Foo f = session.get(Foo.class, fooId); // Hibernate fetches Foo f.getBar(); // Hibernate fetches full Bar object f.getBar().getId(); // No further fetch, returns id 我想f.getBar() 不会触发另一个提取。 我想hibernate给我一个代理对象,允许我调用.getId()而不实际获取酒吧对象。 我究竟做错了什么?

使用Hibernate的ScrollableResults缓慢读取9000万条logging

我只需要使用Hibernate读取MySQL数据库中的表中的每一行,然后根据它写一个文件。 但是有9000万行,它们很大。 所以看起来好像以下是适当的: ScrollableResults results = session.createQuery("SELECT person FROM Person person") .setReadOnly(true).setCacheable(false).scroll(ScrollMode.FORWARD_ONLY); while (results.next()) storeInFile(results.get()[0]); 问题是,上述将试图加载所有9000万行到RAM之前转移到while循环…这将杀死我的内存与OutOfMemoryError:Java堆空间exception:(。 所以我想ScrollableResults不是我正在寻找? 处理这个问题的正确方法是什么? 我不介意,如果这个while循环需要几天(好吧我不喜欢它)。 我想唯一的方法来处理这个是使用setFirstResult和setMaxResults遍历结果,只是使用常规的Hibernate结果,而不是ScrollableResults。 这感觉就像是效率不高,而且在第89万行调用setFirstResult的时候会开始花费很长的时间。 更新:setFirstResult / setMaxResults不起作用,事实certificate需要很长时间才能到达像我担心的偏移量。 这里必须有一个解决scheme! 这不是一个相当标准的程序? 我愿意放弃Hibernate并使用JDBC或其他方法。 更新2:我提出的解决scheme,工作好,不是很好,基本上是这样的forms: select * from person where id > <offset> and <other_conditions> limit 1 由于我还有其他的条件,即使是在索引中的所有条件,它仍然没有我想要的那么快……所以还是有其他的build议。

@UniqueConstraint和@Column(unique = true)在hibernate注释中

@UniqueConstraint和@Column(unique = true)有什么区别? 例如: @Table( name = "product_serial_group_mask", uniqueConstraints = {@UniqueConstraint(columnNames = {"mask", "group"})} ) 和 @Column(unique = true) @ManyToOne(optional = false, fetch = FetchType.EAGER) private ProductSerialMask mask; @Column(unique = true) @ManyToOne(optional = false, fetch = FetchType.EAGER) private Group group;