Tag: hibernate

没有元模型使用的JPA 2 Criteria API不区分大小写的条件

如何在没有元模型使用的情况下创建不区分大小写的条件查询? 我正在尝试做这样的事情: CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery criteria = builder.createQuery(Resident.class); Root personRoot = criteria.from(Resident.class); criteria.where(builder.and( builder.equal(builder.upper(personRoot.get(“firstName”)), filter.getFirstName())), //ERROR builder.equal(personRoot.get(“lastName”), filter.getLastName())); 但它会产生错误: 接口javax.persistence.criteria.CriteriaBuilder中的方法upper不能应用于给定的类型; 需要[ERROR]:找到javax.persistence.criteria.Expression [ERROR]:javax.persistence.criteria.Path

实体持久注册validation侦听器

我正在使用JBoss 6和Seam,我有一个我试图坚持的实体, User 。 我已经扩展了org.jboss.seam.framework.EntityHome以提供UserHome类并重写了persist()方法。 我用javax.validation注释彻底注释了我的实体类。 当我为实体类中的所有字段提供有效值时,该对象将保持不变。 当我违反其中一个validation约束时,持久性会按预期失败。 我遇到的问题是在异步持久化期间违反约束:hibernate没有告诉我哪个约束被违反了! javax.validation.ConstraintViolationException: validation failed for classes [com.example.model.User] duringpersist time for groups [javax.validation.groups.Default, ] at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:132) at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:71) 如果我通过向UserHome.persist()添加EntityManager.flush()来强制同步持久性,那么我可以捕获包含违反约束的ConstraintViolationException和输出日志语句。 我的问题:是否可以使用hibernate / jboss注册一个监听器来进行约束违规? 我认为hibernate没有打印违规行为有点蹩脚,但希望我可以插入一些代码来捕获并记录它们以获取更多信息。 否则我不知道违反了什么约束。 谢谢!

Hibernate多态查询

我有两个类,Person和Company,来自另一个类Contact。 它们在两个表(Person和Company)中以多态forms表示。 简化的类看起来像这样: public abstract class Contact { Integer id; public abstract String getDisplayName(); } public class Person extends Contact { String firstName; String lastName; public String getDisplayName() { return firstName + ” ” + lastName; } } public class Company extends Contact { String name; public String getDisplayName() { return name; } } 问题是我需要查询查找包含某个字符串的displayName的所有联系人。 […]

Hibernate Criteria – 返回列不同的记录

示例数据库表: ID = 1,msgFrom =’你好’,foobar =’meh’ ID = 2,msgFrom =’再见’,foobar =’评论’ ID = 3,msgFrom =’Hello’,foobar =’response’ 示例所需的输出(由hibernate查询生成): ID = 1,msgFrom =’你好’,foobar =’meh’ ID = 2,msgFrom =’再见’,foobar =’评论’ 在上面的示例中,第三条记录将从结果中排除,因为msgFrom列是相同的。 假设Java / Hibernate类叫做Message。 我希望结果作为Message对象列表(或者可以转换为Message的对象)返回。 我希望尽可能使用Criteria API。 我在SO上看到了这个例子,看起来很相似,但我还是无法正确实现它。 select e from Message e where e.msgFrom IN (select distinct m.msgFrom from Message m WHERE m.msgTo = ? AND m.msgCheck […]

无法通过reflection设置器设置字段值

在使用hibernate和MySQL的spring mvc应用程序中,我收到一个错误,这似乎表明Name实体无法找到Patient实体的BaseEntity超类的id属性的setter。 我该如何解决这个错误? 这是错误消息: Caused by: org.hibernate.PropertyAccessException: could not set a field value by reflection setter of myapp.mypackage.Name.patient 以下是触发错误的代码行: ArrayList names = (ArrayList) this.clinicService.findNamesByPatientID(patntId); 这是BaseEntity ,它是Patient和Name的超类: @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @DiscriminatorFormula(“(CASE WHEN dtype IS NULL THEN ‘BaseEntity’ ELSE dtype END)”) public class BaseEntity { @Transient private String dtype = this.getClass().getSimpleName(); @Id @GeneratedValue(strategy = GenerationType.TABLE) protected […]

使用join更新值

使用Hibernate,我想根据条件更新数据库中的数据,但是我收到以下错误:“遍历的节点不能为null” 这是我的数据库描述: Account: id, email, password Member : id, account, team Team: id, current (and a reference to member => members) 这是我的JPA: UPDATE Team t SET t.current = :current LEFT JOIN t.members m WHERE t.current = :current_true AND m.account = :account 我究竟做错了什么? 如果我将LEFT JOIN移动到SET之前: UPDATE Team t LEFT JOIN t.members m SET t.current = :current […]

控制Hibernate EnumType.STRING属性的排序顺序

目前,我的项目使用@Enumerated(EnumType.ORDINAL) ,所以当我按此列排序时,它是根据enum的顺序进行排序,这很好。 但我需要在enum添加一些额外的值,这些值需要插入枚举值列表中的不同位置,并且不能仅添加到底部以维持正确的排序顺序。 如果我这样做,我的数据库将搞砸。 我将不得不编写一些脚本来将所有这些序数值转换为正确的新序数。 以后可能需要添加更多状态。 因为我必须修复数据库中的所有数据,所以我只想做一次,因为这将是一项艰巨的任务。 所以我想切换到EnumType.STRING ,不必再次重新映射数据库中的序号值。 但是,如果我这样做,那我该怎么排序呢? 枚举字符串的字母顺序不是我需要的顺序。 使用下面的类,当我按属性“status”排序时,结果按以下顺序排列: hql = “from Project order by status” Development Planning Production 我希望他们按此顺序出现,而不使用EnumType.ORDINAL : Planning Development Production 如果没有为enum创建表,或者向Project类添加其他列,是否可以这样做? 我试过这个,但它引发了一个exception: hql = “from Project order by status.sort” 枚举: public enum Status { PLANNING(“Planning”, 0), DEVELOPMENT(“Development”, 1), PRODUCTION(“Production”, 2); private final String name; private final int sort; […]

Hibernate unsaved-value注释

我想通过字段VERSION而不是字段ID强制Hibernate(4.2)检查对象持久性。 下面的xml应该有效: 但我想使用注释。 这个java代码够了吗? @Id public String getId() { return this.id; } @Version public Integer getVersion() { return this.version; } 如何指定unsaved-value标签? 我没有找到任何注释。 我已经读过某个地方,Hibernate足够聪明,可以猜测一个对象是否持久,但它并不太令人信服。 如果我想使用-1而不是null,该怎么办? 必须有办法实现这一点,不是吗? 谢谢你的帮助。 编辑 。 Hibernate 3.6参考指南说: “在Hibernate3中几乎从不需要unsaved-value属性,并且在注释中确实没有相应的元素。” 和 “分配的生成器使Hibernate使用unsaved-value =”undefined“。这会强制Hibernate转到数据库以确定实例是暂时的还是分离的,除非有版本或时间戳属性,或者您定义了Interceptor.isUnsaved() “。 我相信@Version对我来说已经足够了。

Spring-Hibernate使用多个数据源/数据库

我正在使用一个使用Spring MVC 3和Hibernate的Web应用程序 我想为我的Web应用程序使用2个数据源MySql和Oracle数据库, 我已经阅读了许多关于“spring-hibernate multiple datasource / database”的教程和解决问题的例子: directjump2java.blogspot.com 堆栈溢出 论坛spring 等等。 但是当我每次运行它时,配置只读取我的第一个数据库配置(MySql)并显示此错误Table ‘db_prod.ksei_lookup_holiday’ doesn’t exist db.prod是我的第一个数据库(MySql)而KSEI_LOOKUP_HOLIDAY是我的第二个数据库(Oracle),则 这是我的spring.xml org.hibernate.dialect.MySQL5Dialect true org.hibernate.dialect.Oracle10gDialect true 这是我的第一个数据库(MySql)的DAO实现 @Repository @Qualifier(value=”sessionFactory”) public class UserDaoImpl extends HibernateDaoSupport implements UserDao{ @Autowired private UserDaoImpl(SessionFactory sessionFactory){ setSessionFactory(sessionFactory); } 这是我的第二个数据库(Oracle)的DAO实现 @Repository @Qualifier(value=”sessionFactorySOAAPP”) public class UpdateKSEIDaoImpl extends HibernateDaoSupport implements UpdateKSEIDao{ @Autowired private UpdateKSEIDaoImpl(SessionFactory sessionFactorySOAAPP){ setSessionFactory(sessionFactorySOAAPP); } […]

将JPA与Hibernate实现一起使用:entityManager.remove – 不工作

我使用JPA而不是Hibernate 4.1.4.Final实现。 我的问题是我无法让EntityManager#remove()工作。 所有其他:更新,插入,选择操作正常工作,除了这一个。 我的persistence.xml文件: org.hibernate.ejb.HibernatePersistence core.entity.Answer core.entity.BaseEntity true NONE 我的Answer实体:( BaseEntity类只保存主键 – ID) @Entity @Table(name = “ANSWER”) @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) public class Answer extends BaseEntity { @Column(name = “ANSWER_VALUE”) private String answerValue; @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = “QUESTION_ID”, nullable = false) private Question question; //overrided equals, hascode, toString // all getters and setters } […]