Questions tagged «hibernate»

Hibernate是一种Java语言的对象关系映射(ORM)库,使开发人员能够以远远超出对象/关系映射的方式在其应用程序中使用POJO风格的域模型。

1
在冬眠中将枚举映射到字符串
我有一个类别休眠模型: @Entity @Table(name = "category") public class Category { @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "id") private long id; @Column(name = "type") private String type; 其中有一个类型字符串字段。另外,我还有一个Java枚举,它表示类别的类型: public enum CategoryType { INCOME, OUTCOME; } 我想用它代替字符串类型。SQL在varchar参数中接受两个不同的值:CategoryIncome或CategoryOutcome。我希望Category模型类接受一个枚举变量-并在休眠状态下以某种方式将其映射到字符串。 可能吗?
92 java  hibernate  enums 

7
如何在JPA中映射名称为保留字的实体字段
@Column(name="open") 在休眠状态下使用sqlserver方言。 [SchemaUpdate] Unsuccessful: create table auth_session (id numeric(19,0) identity not null, active tinyint null, creation_date datetime not null, last_modified datetime not null, maxidle int null, maxlive int null, open tinyint null, sessionid varchar(255) not null, user_id numeric(19,0) not null, primary key (id), unique (sessionid)) [SchemaUpdate] Incorrect syntax near the …

11
Hibernate:提取所有懒惰集合的最佳实践
是)我有的: @Entity public class MyEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Address> addreses; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true) @JoinColumn(name = "myentiy_id") private List<Person> persons; //.... } public void handle() { Session session = createNewSession(); MyEntity entity = (MyEntity) …

8
FetchMode如何在Spring Data JPA中工作
我确实在项目中的三个模型对象之间有关系(文章末尾的模型和存储库片段)。 当我调用PlaceRepository.findById它时,会触发三个选择查询: (“ sql”) SELECT * FROM place p where id = arg SELECT * FROM user u where u.id = place.user.id SELECT * FROM city c LEFT OUTER JOIN state s on c.woj_id = s.id where c.id = place.city.id (对我而言)这是非常不正常的行为。据我阅读Hibernate文档后所知,它应该始终使用JOIN查询。在类中FetchType.LAZY更改为 查询时(带有附加SELECT 的查询)没有任何区别,而在类更改为 (使用JOIN查询时)则没有变化。FetchType.EAGERPlaceCityFetchType.LAZYFetchType.EAGER 当我使用CityRepository.findById抑制射击时,有两个选择: SELECT * FROM city c …

20
休眠错误:具有相同标识符值的另一个对象已与会话关联
在这个配置中,我本质上有一些对象(实际的数据模型要复杂一些): A与B有多对多关系。(B具有inverse="true") B与C具有多对一关系(我已cascade设置为"save-update") C是一种类型/类别表。 另外,我可能应该提到主键是在保存时由数据库生成的。 使用我的数据,有时我会遇到这样的问题:A具有一组不同的B对象,而这些B对象引用了相同的C对象。 打电话时session.saveOrUpdate(myAObject),我收到了一个休眠错误消息:"a different object with the same identifier value was already associated with the session: C"。我知道休眠不能在同一会话中两次插入/更新/删除相同的对象,但是有什么办法解决吗?这似乎不是一种罕见的情况。 在研究此问题的过程中,我看到人们建议使用session.merge(),但是当我这样做时,所有“冲突”对象都会作为空白对象插入数据库,并且所有值都设置为null。显然,这不是我们想要的。 [编辑]我忘了提及的另一件事是(由于无法控制的体系结构原因),每次读取或写入都需要在单独的会话中完成。
91 java  hibernate 

10
如何在JPA中删除具有ManyToMany关系的实体(以及相应的联接表行)?
假设我有两个实体:“组”和“用户”。每个用户可以是多个组的成员,每个组可以有多个用户。 @Entity public class User { @ManyToMany Set<Group> groups; //... } @Entity public class Group { @ManyToMany(mappedBy="groups") Set<User> users; //... } 现在,我要删除一个组(假设它有很多成员)。 问题是,当我在某个组上调用EntityManager.remove()时,JPA提供程序(在我的情况下为Hibernate)不会从联接表中删除行,并且由于外键约束,删除操作也会失败。在User上调用remove()可以正常工作(我想这与拥有关系的一方有关)。 那么在这种情况下如何删除组? 我想出的唯一方法是加载组中的所有用户,然后为每个用户从其组中删除当前组并更新用户。但是,对于该组中的每个用户调用update()只是为了能够删除该组,这似乎很荒谬。
91 java  hibernate  jpa  orm 

6
Spring Data JPA将本机查询结果映射到非实体POJO
我有一个带有本地查询的Spring Data Repository方法 @Query(value = "SELECT g.*, gm.* FROM group g LEFT JOIN group_members gm ON g.group_id = gm.group_id and gm.user_id = :userId WHERE g.group_id = :groupId", nativeQuery = true) GroupDetails getGroupDetails(@Param("userId") Integer userId, @Param("groupId") Integer groupId); 并且我想将结果映射到Non-Entity POJO GroupDetails。 是否可以,如果可以,请提供示例吗?

4
什么时候以及如何使用休眠二级缓存?
我无法理解休眠何时进入二级缓存以及何时使缓存失效。 这是我目前所了解的: 第二级缓存在会话之间存储实体,作用域为SessionFactory 您必须告诉要缓存的实体,默认情况下不会缓存任何实体 查询缓存将查询结果存储在缓存中。 我不明白的是 休眠何时会命中此缓存? 假设我已经设置了二级缓存,但没有设置查询缓存。我想缓存我的客户,其中有50000。我可以通过哪些方式从缓存中检索客户? 我想我可以通过缓存从id获取它们。那将是容易的,但也不值得缓存。但是,如果我想对所有客户进行一些计算,该怎么办?假设我要显示客户列表,那么我将如何访问他们? 如果禁用查询缓存,如何获得所有客户? 如果有人更新了一位客户,将会怎样? 客户会在缓存中失效还是所有客户都失效? 还是我认为缓存完全错误?在这种情况下,更适合使用二级缓存?休眠文档根本不清楚高速缓存实际上是如何工作的。只有有关如何进行设置的说明。 更新: 因此,我开始理解二级缓存(不带查询缓存)对于按ID加载数据非常有用。例如,我有一个用户对象,我想检查Web应用程序中每个请求的权限。通过在二级缓存中缓存用户来减少数据库访问是否是一个好案例?就像我将用户ID存储在会话中或在需要检查权限的任何地方一样,我将通过用户的ID加载用户并检查权限。

4
注释@Transactional。如何回滚?
我已成功将此注释用于Dao类。回滚适用于测试。 但是现在我需要回滚真实代码,而不仅仅是测试。有用于测试的特殊注释。但是哪些注释适用于非测试代码?对我来说这是一个大问题。我已经花了一天的时间。官方文档不符合我的需求。 class MyClass { // this does not make rollback! And record appears in DB. EmployeeDaoInterface employeeDao; public MyClass() { ApplicationContext context = new ClassPathXmlApplicationContext( new String[] { "HibernateDaoBeans.xml" }); employeeDao = (IEmployeeDao) context.getBean("employeeDao"); } @Transactional(rollbackFor={Exception.class}) public void doInsert( Employee newEmp ) throws Exception { employeeDao.insertEmployee(newEmp); throw new RuntimeException(); …
90 java  hibernate  spring 

6
使用Log4j XML配置文件配置Hibernate日志记录?
我还没有找到任何有关如何使用Log4j的XML样式配置文件配置Hibernate日志记录的文档。 这是否有可能,或者我是否已使用属性样式配置文件来控制Hibernate的日志记录? 如果任何人有任何信息或文档链接,我们将不胜感激。 编辑: 只是为了澄清,我正在寻找控制Hibernate的实际XML语法的示例。 EDIT2: 这是我的XML配置文件中的内容。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Threshold" value="info"/> <param name="Target" value="System.out"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/> </layout> </appender> <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender"> <param name="file" value="Program-Name.log"/> <param name="MaxFileSize" value="1000KB"/> <!-- Keep one …

7
org.hibernate.PersistentObjectException:分离的实体传递给持久化
我已经成功用冬眠写了我的第一个主要的孩子例子。几天后,我再次使用它并升级了一些库。不知道我做了什么,但是我再也无法运行了。有人可以帮助我找出返回以下错误消息的代码中的错误吗: org.hibernate.PersistentObjectException: detached entity passed to persist: example.forms.InvoiceItem at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:127) at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:799) at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:791) .... (truncated) 休眠映射: <hibernate-mapping package="example.forms"> <class name="Invoice" table="Invoices"> <id name="id" type="long"> <generator class="native" /> </id> <property name="invDate" type="timestamp" /> <property name="customerId" type="int" /> <set cascade="all" inverse="true" lazy="true" name="items" order-by="id"> <key column="invoiceId" /> <one-to-many class="InvoiceItem" /> </set> …
89 hibernate 


15
休眠序列不存在
我尝试使用春季4.2版将项目中的休眠模式从4升级到5 。升级之后,我在调用更新方法时在堆栈跟踪中发现以下错误。 10:53:32,185 ERROR TableStructure:149 - could not read a hi value com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.hibernate_sequence' doesn't exist 我用注解更改了自动递增的ID @GeneratedValue(strategy=GenerationType.AUTO) 错误仍然存​​在。
88 java  spring  hibernate 

3
Hibernate延迟加载应用程序设计
我倾向于将Hibernate与Spring框架结合使用,它具有声明式事务划分功能(例如@Transactional)。 众所周知,休眠试图尽可能做到非侵入性和透明性,但是事实证明,在使用关系时这更具挑战性lazy-loaded。 我看到了许多具有不同透明度的设计方案。 使关系不延迟加载(例如, fetchType=FetchType.EAGER) 这违反了整个延迟加载的想法。 使用初始化初始化集合 Hibernate.initialize(proxyObj); 这意味着与DAO的耦合较高 尽管我们可以使用定义接口initialize,但不能保证其他实现也可以提供等效的接口。 将交易行为添加到持久Model对象本身(使用动态代理或@Transactional) 我没有尝试过动态代理方法,尽管我似乎从未让@Transactional处理持久对象本身。可能由于该休眠而导致对代理进行操作。 实际进行交易时失去控制 同时提供懒/非延迟API,例如,loadData()和loadDataWithDeps() 强制应用程序知道何时采用哪个例程,再次紧密耦合 方法溢出loadDataWithA(),,..,loadDataWithX() 强制查找依赖关系,例如,仅提供byId()操作 需要很多非面向对象的例程,例如,findZzzById(zid)然后getYyyIds(zid)代替z.getY() 如果事务之间的处理开销很大,则以一对一的方式获取集合中的每个对象可能会很有用。 成为应用程序@Transactional的一部分,而不只是DAO 嵌套事务的可能注意事项 需要适合于事务管理的例程(例如足够小) 对程序的影响较小,尽管可能会导致大量交易 为DAO提供动态提取配置文件,例如,loadData(id, fetchProfile); 应用程序必须知道何时使用哪个配置文件 AoP类型的交易,例如,拦截操作并在必要时执行交易 需要字节码操作或代理使用 执行交易时失去控制 一如既往的黑魔法:) 我错过了任何选择吗? 尝试最小化lazy-loaded关系对应用程序设计的影响时,您首选的方法是什么? (哦,很抱歉,WoT)

17
当createClob()方法引发错误时,禁用上下文LOB创建
我正在将Hibernate 3.5.6与Oracle 10g一起使用。我在初始化期间看到以下异常,但应用程序本身运行正常。发生此异常的原因是什么?以及如何纠正? 异常 由于createClob()方法引发错误而禁用上下文LOB创建:java.lang.reflect.InvocationTargetException 信息 Oracle版本:Oracle数据库10g企业版10.2.0.4.0版JDBC驱动程序:Oracle JDBC驱动程序,版本:11.1.0.7.0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.