Java 使用

Java 使用,java,hibernate,join,annotations,hql,Java,Hibernate,Join,Annotations,Hql,我正在尝试进行hibernate连接-查询似乎有效,但当我尝试从返回的对象转换为我希望的类型时,它不起作用…我假设它也有连接表信息 @Entity @Table(name = "PSNG_SMRY") public class PSNG_SMRY implements Serializable, Comparable<PSNG_SMRY> { private static final long serialVersionUID = 1L; @Id @Gene

我正在尝试进行hibernate连接-查询似乎有效,但当我尝试从返回的对象转换为我希望的类型时,它不起作用…我假设它也有连接表信息

@Entity
@Table(name = "PSNG_SMRY")
public class PSNG_SMRY implements Serializable, Comparable<PSNG_SMRY>
{
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment"  , strategy = "increment")
    @Printable
    public Integer SMRY_ID;
    public Integer DEV_ID;
    public Integer RPTD_TRN_ID;

        @OneToOne(mappedBy="smry", cascade=CascadeType.ALL)
        public TRN trn;

}

@Entity
@Table(name = "TRN")
public class TRN implements Serializable
{
    private static final long serialVersionUID = 1L;

    @Id
    public Integer TRN_ID;
        public String TRN_SCTN
        public String TRN_SYMB;

         @OneToOne
        @PrimaryKeyJoinColumn
        private PSNG_SMRY smry;
}
编辑: 这是连接类-它只用于获取会话信息和执行所有hibernate操作,例如获取数据…

public class Connection {

public static Logger logger = Logger.getLogger(Connection.class);

   Session session;
   String sessionName;

public Connection(String name){
session = HibernateUtil.getSessionFactory(name).openSession();

sessionName = name;
    if(session.isConnected()){
        //System.out.println(name + " - Connected");
    }
}

public Session getSession(){
    return session;
}

@SuppressWarnings("unchecked")
public List<Object> retrieve(String qry, List<HQLParams> paramList)
{
    Transaction transaction = null;
    List<Object> obj = null;

    try {
        transaction = session.beginTransaction();

        String queryString = qry;

        Query query = session.createQuery(queryString);

        if(paramList != null)
        {
            for(HQLParams param: paramList)
            {
                query.setParameter(param.paramName, param.params);
            }
        }


        List<Object> obj_ = query.list();
        obj = obj_;
        //session.getTransaction().commit();

    } catch (HibernateException ex) {
        ex.printStackTrace();
        logger.error(ex.getMessage() + "\n" + ex.getStackTrace());
        transaction.rollback();
    } catch (Exception ex) {
        System.err.println(ex.getMessage());
        logger.error(ex.getMessage() + "\n" + ex.getStackTrace());
    }
    finally
    {
        session.close();
        //System.out.println("Closing session " + sessionName);
    }

    return obj;
}
}
公共类连接{
公共静态记录器=Logger.getLogger(Connection.class);
会议;
字符串sessionName;
公共连接(字符串名称){
session=HibernateUtil.getSessionFactory(名称).openSession();
sessionName=名称;
if(session.isConnected()){
//System.out.println(名称+“-连接”);
}
}
公共会话getSession(){
返回会议;
}
@抑制警告(“未选中”)
公共列表检索(字符串qry、列表参数List)
{
事务=空;
列表obj=null;
试一试{
事务=session.beginTransaction();
字符串queryString=qry;
Query=session.createQuery(queryString);
if(paramList!=null)
{
for(HQLParams参数:paramList)
{
query.setParameter(param.paramName,param.params);
}
}
列表对象=query.List();
obj=obj_2;;
//session.getTransaction().commit();
}捕获(HibernateeException例外){
例如printStackTrace();
logger.error(例如getMessage()+“\n”+例如getStackTrace());
transaction.rollback();
}捕获(例外情况除外){
System.err.println(例如getMessage());
logger.error(例如getMessage()+“\n”+例如getStackTrace());
}
最后
{
session.close();
//System.out.println(“结束会话”+会话名称);
}
返回obj;
}
}

我最终弄明白了这一点-我之所以会出现施放错误,是因为hibernate将
PSNG\u SMRY
TRN
对象作为
对象[]
返回,而不是作为一个对象返回。

如果你想要PSNG\u SMRY实例,你不需要请求TRN表。这是在使用JPA映射时为您提供的

   FROM PSNG_SMRY P 
        WHERE P.FIR_AXLE_PASD_DT > sysdate - :timeLimit 
        and P.FIR_AXLE_PASD_DT < sysdate - 1/24 
        ORDER BY P.FIR_AXLE_PASD_DT

它不起作用了
-你有例外吗?其他行为?哪个例外?+显示您正在查询代码。实体PSNG_SMRY中没有RPTD_TRN_ID字段,因此很难解释如何编写查询。可以肯定的是,不仅您不遵守Java命名约定,而且所有字段都没有任何意义,这使得代码和查询非常难以理解。使用真实的语言。我不熟悉HibernateAPI中的这种
连接
对象。您使用的是直接JDBC吗?或者除Hibernate之外的其他第三方提供此API?@jbnize字段未使用Java命名约定命名的原因是,您可以为每个字段命名字段的确切名称,Hibernate将在不使用注释的情况下创建链接……我在从代码中提取片段,因为有很多字段…@yair我更新了问题以包括连接类…不,我没有使用JDBC-使用hibernate 4.1.2
   FROM PSNG_SMRY P 
        WHERE P.FIR_AXLE_PASD_DT > sysdate - :timeLimit 
        and P.FIR_AXLE_PASD_DT < sysdate - 1/24 
        ORDER BY P.FIR_AXLE_PASD_DT
    @OneToOne(mappedBy="smry", cascade=CascadeType.ALL)
    public TRN trn;