Tag: hibernate

创建一个可以处理所有类型的CRUD操作的类。 每次我需要做CRUD时都不需要创建SessionFactory或Session对象

我想在java中创建一个可以与Hibernate配置交互的方法,并将某些操作识别为ENUM(例如:读取,更新,添加,删除等) 方法参数应该是(枚举操作,类DTO,NamedQuery namedquery,DTOObject Object_to_persist,param(任何额外参数))。 方法应该是方便的,我可以通过传递实际参数(Operation.read,USERDTO.class,namedquery,USERDTO obj_UserDTO,HashMap hmapData)随时调用它。 /* Enum Defined Operation done to the database. */ public enum Operations {READ,UPDATE,ADD,DELETE}; /*Centralized Method Defination for Basic CRUD Operation */ public T DatabaseCRUDOperations((Operation.READ,USERDTO.class , namedquery , USERDTO obj_UserDTO , HashMap hmapid){ switch(Operation opts){ case Operation.Read : //Call Read Method break; case Operation.UPDATE: //call Update Method break; …… […]

用于事务重用的Hibernate模式

我有一个基本方法,我写的是为了不反复重复相同的hibernate会话/事务逻辑。 这很简单,但有一个特定的问题,我不确定这种方法可以解决。 想象一下,您有一个User实体和一个Permission实体。 如果请求保存用户及其匹配权限,那么我认为在单个事务中执行这两个操作是有意义的,因为只能保存其中一个实体可能被视为数据损坏。 例如,如果未能保存用户的权限,则可以保证对先前插入的用户数据进行回滚。 我提出了以下方法来允许通用的hibernate操作,如果有必要可以使用当前事务,尽管我现在认为,在调用session.beginTransaction()时它的当前forms不会起作用。 即使前一个没有被提交,也可能会返回一个新的事务(这是这种情况吗?)。 假设我更改了它以使其返回当前会话和事务,如果指定当前事务将有更多操作,您认为它会起作用吗? 做这样的事情是否可取,或者你会建议改变方法吗? 谢谢 protected void baseOperation(Class entityClass, List instances, BaseHibernateDAO.Operations operation, boolean isLastOperation) throws Exception { Session session = null; Transaction transaction = null; boolean caughtException = false; //get session from factory session = HibernateSessionFactory.getSession(); try { //get current transaction transaction = session.beginTransaction(); for (Object instance : instances) […]

@MappedSuperclass不是@entity?

所以我正在使用DerbyDB,我正在设置一些实体。 我有一个@MappedSuperclass ,它被用作某些实体的超类( @Entity )。 更具体地说,我有一个超类User和3个子类,即admin , regular和guest 。 现在我有一个不同的实体,让我们说应该引用(作为其中一个字段)其所有者的文件。 所以我创建了一个名为User owner的字段。 我得到的错误是: Exception Description: [File] uses a non-entity [User] as target entity in the relationship attribute [field owner]. 有解决方法吗?

如何使用doSecondPassexception解决jpa和hibernate一对一注释

您好我正在编写简单的代码,使用jpa和Hibernate 3.2版本将数据插入到两个表中。我的意图是将Employee详细信息保存在两个表中,即Employee包含employeeId,这是主键,手动分配指定值和Employee Address共享使用@onetoOne annotions的Employee表中的主键employeeId。我的类就像lool一样 @Entity @Table(name = “employee”, catalog = “test”, uniqueConstraints = {}) public class Employee implements java.io.Serializable { // Fields private Integer employeeid; private String name; private Employeeaddress employeeaddress; // Constructors /** default constructor */ public Employee() { } /** minimal constructor */ public Employee(Integer employeeid) { this.employeeid = employeeid; } /** full […]

将提取更改为EAGER似乎可以修复无关的会话缓存问题

这不是一个“它破碎”的问题。 这是为什么不打破?! 题。 不幸的是,需要一些上下文。 之前我问了一个问题,我想如何覆盖Hibernate的第一级缓存,以便获得新更新的JobStatus实体的数据而不是缓存(但是陈旧的)版本。 我得到了两条有用的评论:首先,我应该在服务方法上尝试@Transactional(propagation = Propagation.REQUIRES_NEW) ; 第二,在尝试分离线程来处理某些东西时,我调用了thread.run()而不是thread.start() ,它运行代码但是在同一个线程上。 应用这些建议后,我发现REQUIRES_NEW似乎没有做任何事情,并且thread.start()产生了ERROR: org.hibernate.LazyInitializationException failed to lazily initialize a collection of role: DataSourceResults 现在,作为实验,我将DataSourceResults中的集合字段的加载更改为EAGER 。 这不仅修复了LazyInitializationException,而且修复了过时的会话缓存问题,即使这是一个完全不同的实体类型 JobStatus。 我的问题基本上是: 这怎么可能? 供参考:所涉及实体的ORM XML。 <!—-> <!—-> TIMESTAMP

在hibernate的常见位置进行逻辑删除

我在我的应用程序中使用Spring和Hibernate。 我只允许在我的应用程序中进行逻辑删除,我需要设置字段isActive = false。 我没有在所有实体中重复相同的字段,而是使用属性和’isActive’的getter-setter创建了一个Base Class。 因此,在删除期间,我调用update()方法并将isActive设置为false。 我无法让这个工作。 如果有任何想法,请告诉我。 基本实体 public abstract class BaseEntity implements IEntity { @Basic @Column(name = “IsActive”) protected boolean isActive; public Boolean getIsActive() { return isActive; } public void setIsActive(Boolean isActive) { isActive= isActive; } } 儿童实体 @Entity(name=”Role”) @Table(schema = “dbo”) public class MyEntity extends BaseEntity { //remaining entities } Hibernate […]

Hibernate:按示例查询涉及一对多关系

我最近开始使用Criteria API的示例组件进行查询,并遇到了一个奇怪的问题 – 尝试执行搜索时会抛出org.hibernate.QueryException。 我的方案如下: 我有一个类A,它的一个属性有一组B类实例(Set listOfBs)。 这被映射为A中的一对多关系。 我希望在B的示例实例上设置标准查询,例如,使用属性值“somevalue”指定所有B,然后应用该条件以查找在其集合中具有此类B的所有A。 这是我正在使用(或希望)的代码: Criteria aCrit = session.createCriteria(A.class); A aExampleInstance = new A(); Example aExampleCriteria = Example.create(aExampleInstance ); Criteria bCrit = atCrit.createCriteria(“listOfBs”); B bExampleInstance = new B(); bExampleInstance .setProperty(“somevalue”); bCrit.add(Example.create(bExampleInstance )); List results = aCrit.add(aExampleCriteria).list(); 我正在使用XML映射,A正在将它与B的关系映射如下(A.hbm.xml): 我意识到这可能不是正确的方法 – 欢迎任何更好的建议。 在任何情况下,麻烦的是我得到一个例外: org.hibernate.QueryException:无法解析属性:_com of:B 我已经搜索并意识到exception告诉我的是什么。 但是在我的任何类中都没有声明这样的属性名称 – 在我看来,这可能是Hibernate在引擎盖下使用的任何仪器的一部分,以使持久性看起来透明。 我很好奇这是否是一个已知问题,是否有人使用过的解决方法,或者是否有较新版本的解决方案? 我正在使用Hibernate 3.6.6。 […]

如何在JSP页面上映射一对多关系并在提交页面时存储它们?

假设,我有一个class级Student ,另一个是Books 。 Studentclass与Books有一对多的关系。 现在,我想从学生姓名,城市等用户那里获取数据,并在同一页面上添加Books详细信息,如书名,作者,价格等。 用户可以添加多个Books详细信息(显然)。 然后,我想提交页面,其中包含与父项一起填充的所有嵌套对象(书籍)数据。 我怎样才能做到这一点? 只要满足要求,您可以采用任何其他示例而不是学生和书籍。 这是我的JSP文件: // here student is a parent object and book is a child object having name,author etc details. ${company} form Name: City: Submit 如果你能给我一个很好的联系,这也将是一个很大的帮助。

如何使用Hibernate逆向工程工具生成或以进行反向关联?

我想向一个集合中添加元素,最终会像这样映射: 我想要使​​用Hibernate代替,因为我不关心它们被检索的顺序,我只想保持关联的那一方是最新的。 根据https://www.hibernate.org/117.html,“Hibernate可以添加到,或声明with inverse =”true“而不初始化集合。” 我的问题是我不知道如何强制(或建议)逆向工程工具(hibernate-tools.jar)使用或 – 它总是使用。 谢谢!

如何使用Hibernate JPA线程安全进行数据库访问?

我想知道我需要做什么才能访问数据库线程安全。 这是我的Entity类: @Entity @Table(name = “students”) @NamedQuery(name = “Student.getAll”, query = “SELECT s FROM Student s”) public class Student { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @Column(length = 32, name = “name”) private String name; // … constructor, getters and setters, toString … } 这是DbService类: public class DbService { public EntityManager em = Persistence […]