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