小编Sky*_*han的帖子

如何在JPA实体bean中使用或注释虚拟字段,该虚拟字段不应该在数据库中持久化

我有使用Struts2动作类进行登录验证的代码,该动作类调用EJB进行LDAP验证,然后验证(LDAP凭证),查询用户数据库以使用JPA实体bean获取其余的用户信息. POJO.与用户名,用户ID和其他用户信息不同,密码不存储在数据库中,但是为了POJO getter和setter方法,我尝试包含一个虚拟密码字段 - 用于提供Struts2操作表单.

问题是在ldap身份验证之后,发生了一个异常,说明数据库中不存在"密码"列(无论如何都不是这样!)

Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'PASSWORD' in 'field list'
Error Code: 1054
Call: SELECT PERSON_ID, ACTIVE_USER, EMAIL, FIRSTNAME, SURNAME, PASSWORD, FULLNAME, EMPLOYEE_NUMBER FROM xxte_employees WHERE (ACTIVE_USER = ?)
        bind => [john.doe]
Query: ReadAllQuery(name="XxteEmployees.validateLogin" referenceClass=XxteEmployees sql="SELECT PERSON_ID, ACTIVE_USER, EMAIL, FIRSTNAME, SURNAME, PASSWORD, FULLNAME, EMPLOYEE_NUMBER FROM xxte_employees WHERE (ACTIVE_USER = ?)")
        at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:333)
        at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:687)
        at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:530)
        at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:529)
....
Run Code Online (Sandbox Code Playgroud)

这是实体bean的代码:

public class XxteEmployees implements Serializable {
    private …
Run Code Online (Sandbox Code Playgroud)

java orm jpa

26
推荐指数
1
解决办法
2万
查看次数

在JPA 2中使用预测

我需要转换Hibernate条件查询,如下所示

curList = session.createCriteria(Islem.class)
                    .createAlias("workingDay", "d")
                    .setProjection(Projections.sum("amount"))
                    .add(Restrictions.eq("currency", CURRENCY))
                    .add(Restrictions.eq("product", product))
                    .add(Restrictions.ne("status", INACTIVE))
                    .add(Restrictions.eq("d.status", ACTIVE))
                    .getResultList();
Run Code Online (Sandbox Code Playgroud)

然而在JPA(2)中,我不知道如何实现投影 - 在这种情况下 - 总和.奇怪的是,Hibernate和JPA(甚至是Hibernate JPA 2)在标准查询中存在巨大差异.

我开始

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Islem> cq = cb.createQuery(Islem.class);
Root<Islem> isr = cq.from(Islem.class);
cq.select(isr).where(cb.equal(isr.get("currency"), CURRENCY), 
                     cb.notEqual(isr.get("status"), INACTIVE),
                     cb.equal(isr.get("product"), product));
Run Code Online (Sandbox Code Playgroud)

但是不知道如何在这里实现投影既不是别名

hibernate projection criteria-api hibernate-criteria jpa-2.0

18
推荐指数
1
解决办法
2万
查看次数

是否可以在Hibernate中的同一项目中同时使用注释和hbm.xml文件?

是否必须在使用注释和hibernate配置文件之间做出严格的选择,或者是否可以在同一个项目中同时使用这两种方式?

我们有一个大型项目,完成Hibernate 3.2.5和配置.hbm.xml文件的POJO .该项目使用Hibernate SessionManagerFactory而不是基于JTA的EntityManager工厂.

这种方式配置了超过一百个POJO,原始开发团队不愿意切换到注释.

同时我们需要使用更多的POJO来扩展项目,我们愿意使用Hibernate注释来配置这些POJO,并希望继续使用Hibernate - 如果可能的话 - 而不是切换到JPA.

是否可以同时.hbm.xml为某些POJO 使用配置文件和其他POJO的注释组合?

java hibernate java-ee

10
推荐指数
2
解决办法
6862
查看次数

为什么Hibernate不能在实体中找到辅助表?

两个带左连接的相关数据库表


我找不到这个问题的答案,这也是许多其他论坛上的问题.虽然我在数据库中存在表IAS_FORM_BKT_BAYI和IAS_FORM_BKT_BAYI_SO,但带有带注释的实体类(异常下面的源代码)我在基于JSF和Hibernate的应用程序中遇到了这个异常:

org.hibernate.AnnotationException: Cannot find the expected secondary table: no IAS_FORM_BKT_BAYI available for net.ozar.bpm.entity.bkt.Bayi
    org.hibernate.cfg.Ejb3Column.getJoin(Ejb3Column.java:293)
    org.hibernate.cfg.Ejb3Column.getTable(Ejb3Column.java:272)
    org.hibernate.cfg.annotations.SimpleValueBinder.make(SimpleValueBinder.java:222)
    org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1898)
    org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1279)
    org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:754)
    org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:546)
    org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:291)
    org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1148)
    org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1226)
    org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:173)
    org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:854)
    org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:191)
    org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:253)
    org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:125)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:83)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)
    net.ozar.bpm.util.EntityUtil.getEntityManagerFactory(EntityUtil.java:13)
    net.ozar.bpm.util.EntityUtil.getEntityManager(EntityUtil.java:21)
    net.ozar.bpm.servisler.CalisanJpaController.getEntityManager(CalisanJpaController.java:31)
    net.ozar.bpm.servisler.CalisanJpaController.getPersonId(CalisanJpaController.java:120)
    net.ozar.bpm.web.jsfmanaged.LoginBean.oturumAc(LoginBean.java:122)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.lang.reflect.Method.invoke(Unknown Source)
    org.apache.el.parser.AstValue.invoke(AstValue.java:191)
    org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
    javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    javax.faces.component.UICommand.broadcast(UICommand.java:387)
    org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
    org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
    org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
    org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
    com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
    org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
    net.ozar.bpm.web.filters.RestrictPageFilter.doFilter(RestrictPageFilter.java:180)
Run Code Online (Sandbox Code Playgroud)

Bayi.java

@Entity
@Table(name = "IAS_FORM_BKT_BAYI")
@SecondaryTable(name="IAS_FORM_BKT_BAYI_SO", pkJoinColumns = @PrimaryKeyJoinColumn(name="CUSTOMER_ID"))
public class Bayi implements Serializable {
private static final …
Run Code Online (Sandbox Code Playgroud)

entity hibernate join left-join

3
推荐指数
1
解决办法
1万
查看次数

将Hibernate Criteria Query转换为JPA 2 Criteria Query

我有以下Hibernate 3.x Criteria Query,我想将它转换为Hibernate JPA 2.0查询:

Calendar calLo = new GregorianCalendar();
calLo.set(Calendar.HOUR_OF_DAY, 00);
calLo.set(Calendar.MINUTE, 00);
calLo.set(Calendar.SECOND, 00);
Calendar calHi = new GregorianCalendar();
calHi.set(Calendar.HOUR_OF_DAY, 23);
calHi.set(Calendar.MINUTE, 59);
calHi.set(Calendar.SECOND, 00);

List taskList = session.createCriteria(Task.class, "task").add(Restrictions.ge("task.taskDate", calLo.getTime())).add(Restrictions.le("task.taskDate", calHi.getTime())).add(Restrictions.eq("task.taskActive", true)).addOrder(Order.desc("task.taskNo")).list();
Run Code Online (Sandbox Code Playgroud)

我尝试重新开始代码,例如:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Task.class);
Root task = cq.from(Task.class);
cq.select(task).where(cb.ge("task.taskDate", calLo.getTime()) ... );
Run Code Online (Sandbox Code Playgroud)

但JPA 2标准查询似乎不支持CriteriaBuilder.ge(...)方法接受日期或日历作为输入参数,我的代码似乎从一开始就失败了.

我需要建议来保留和调整Hibernate会话标准的功能.

session hibernate criteria-api criteriaquery jpa-2.0

2
推荐指数
1
解决办法
2739
查看次数