Tag: hibernate

审核数据库中多个表的历史记录

我的数据库中有3-4个表,我想跟踪它们的变化。 我主要关注更新。 每当发生更新时,我想在审计表中存储先前的条目(值或完整行)。 我想到的基本专栏如下: AuditId, TableName, PK1, PK2, PK3, PKVal1, PKVal2, PKVal3, UpdateType, PrevEntryJSON JSON将采用以下格式: Key:Value ,我更喜欢随着列的不断变化,我希望保留所有值,即使它们没有变化。 其他选项是删除带有100个列的JSON,这些列的名称与不同的列相同(所有表的累计)。 我想听听别人对此的看法。 我怎么能改进它以及我可以面对哪些问题? 通过触发器可能不是更好的方式,但我对此持开放态度。 谢谢,

如何在Wildfly中部署时使用persistence.xml设置hibernate.hbm2ddl.auto

我需要为使用JPA的webapp生成部署模式。 服务器是Wildfly 9,Hibernate是JPA提供者。 我可以通过添加来实现这一点 到persistence.xml。 是否有另一种方法可以在Wildfly 9中为每个webapp和部署设置此属性? 我也尝试过hibernate.properties,但这没有效果。

@Where子句在hibernate join查询中不起作用

我有2个@Where注释实体。 第一个是分类; @Where(clause = “DELETED = ‘0’”) public class Category extends AbstractEntity 它有以下关系; @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = “category”) private Set subCategories = Sets.newHashSet(); 第二个实体是SubCategory; @Where(clause = “DELETED = ‘0’”) public class SubCategory extends AbstractEntity 并包含对应关系; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “CATEGORY_ID”) private Category category; 每当我打电话给下面的Dao方法; @Query(value = “select distinct category from […]

hibernate选择所有投影组

在hibernate Criteria规范中,如果我想在表中对属性进行分组,我必须使用Projections.groupProperty。 问题是我无法选择表中的所有字段。 我想要的是: SELECT * FROM entity GROUP BY字段 如果我在hibernate Criteria中使用group,那么groupProperty必须存在,并且sql结果将是:SELECT field FROM entity GROUP BY field。 有什么办法可以得到我想要的东西吗? 我在hibernate代码中看到,在CriteriaJoinWalker中,当我想选择all(select *)时,代码已经指定是否有投影。 我的假设是,如果我想改变行为,我必须更改CriteriaJoinWalker代码。 我可以修改代码,也许我可以得到我想要的结果,但如果可以的话,我不想将hibernate核心代码覆盖到我的项目中。 有没有办法在不更改hibernate代码的情况下直接更改它? // CriteriaJoinWalker if(translator.hasProjection()) { resultTypes = translator.getProjectedTypes(); initProjection(translator.getSelect(), translator.getWhereCondition(), translator.getOrderBy(), translator.getGroupBy(), LockMode.NONE); } else { resultTypes = (new Type[] { TypeFactory.manyToOne(persister.getEntityName()) }); initAll(translator.getWhereCondition(), translator.getOrderBy(), LockMode.NONE); } 谢谢

Bitronix + Spring + Hibernate + Persistence

我正在尝试创建事务管理器并将其与Hibernate for Oracle一起使用。 我的persistence.xml文件是: org.hibernate.ejb.HibernatePersistence jdbc/testDS1 org.drools.persistence.session.SessionInfo org.jbpm.persistence.processinstance.ProcessInstanceInfo org.drools.persistence.processinstance.WorkItemInfo true 在spring的applicationContext.xml中我添加了: myURL username password 但是,当我跑: EntityManagerFactory emf = Persistence.createEntityManagerFactory(“org.drools.persistence.jpa”); 我得到一个例外: Caused by: org.hibernate.HibernateException: Could not find datasource: jdbc/testDS1 ds = (DataSource ) NamingHelper.getInitialContext(props).lookup(jndiName); Hibernate infra文件。 可能是什么问题呢? Hibernate持久化如何知道引用spring txManager bean?

Hibernate持久的Dates

有没有办法告诉Hibernate java.util.Date应该持久保存? 我需要这个来绕过MySQL中缺失的毫秒级分辨率。 你能想到这种方法的任何缺点吗?

Hibernate和Apache Felix的依赖链冲突

我理解OSGi抱怨多个依赖链的概念 – 一个包可以多次使用,当导入包没有准确指定它需要的版本时,OSGi容器可能会遇到不知道提供什么的麻烦。 不幸的是,本周我遇到了这样一个问题,但两个捆绑都是第三方捆绑,所以我无法真正影响他们的import和出口。 以下是我收到的两条错误消息: org.osgi.framework.BundleException: Uses constraint violation. Unable to resolve bundle revision org.hibernate.core [28.0] because it is exposed to package ‘javax.xml.stream’ from bundle revisions com.springsource.javax.xml.stream [23.0] and org.apache.felix.framework [0] via two dependency chains. Chain 1: org.hibernate.core [28.0] import: (osgi.wiring.package=javax.xml.stream) | export: osgi.wiring.package=javax.xml.stream com.springsource.javax.xml.stream [23.0] Chain 2: org.hibernate.core [28.0] import: (osgi.wiring.package=javax.xml.transform.stax) | export: osgi.wiring.package=javax.xml.transform.stax; […]

如何让Hibernate在与JPA一起使用时自动在数据库中创建表?

我是JPA的新手,现在我正在尝试理解标准示例,我在线阅读并看到了一些stackoverflow问题,我在所有这些问题中发现的是以下语句将允许hibernate在运行时创建表。 hibernate.hbm2ddl.auto=create 但每当我在mysql数据库中运行没有表的代码时,它会抛出以下错误: . ____ _ __ _ _ /\\ / ___’_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | ‘_ | ‘_| | ‘_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ‘ |____| .__|_| […]

使用相同的数据透视表对具有子类的多对多进行hibernate

拥有此模型架构: Person |__ Student |__ SchoolBoy |__ CollegeStudent 我正在使用Hibernate 3.6并使用tperson表为所有类使用了一个鉴别器列。 我的映射是这样完成的: 现在我想介绍课程实体,实现课程与学生之间的关系。 当然,这是一种多对多的关系。 假设我使用名为tstudent_course的数据透视表,其中包含SchoolBoy和CollegeStudent两种类型的学生。 该表包含对该人本身及其正在学习的课程的参考。 现在,我想在加载课程实体时,大学生和学生之间存在差异。 我这样做: 但是,作为数据透视表的一个表,其中包含对每种类型学生的引用,它会尝试加载我的集合中的每个学生,然后我收到下一个exception: Object with id: 2 was not of the specified subclass: CollegeStudent (loaded object was of wrong class class SchoolBoy) 似乎Hibernate正在进行连接而没有评估我的学生的具体类型,并试图在我的大学生集合中注入一个SchoolBoy。 我该怎么做才能避免这种情况? 是否有可能在枢轴表中建立一种歧视? 或者我是否必须为每种子类创建特定的数据透视表?

Junit:为删除实体的方法编写测试?

对于下面的代码,我可以编写哪些最详尽的测试? public void deleteFromPerson(person person) { person = personRepository.returnPerson(person.getId()); personRepository.delete(person); } 此方法位于a service类中。 该方法调用JpaRepository ,然后在实体上调用它的delete()方法。 如果无法测试实体是否被删除,是否还有其他 tests cases可以在该方法上运行?