Сеанс и метод get в спящем режиме - PullRequest
0 голосов
/ 28 марта 2012

У меня есть следующий проект и он возвращает "null". Как его решить?

Мой класс Java:

public class UpdateExample {  
    /**
   * @param args
    */
     public static void main(String[] args) {  
         // TODO Auto-generated method stub 
         Session sess = null;  
         try {  
            SessionFactory fact = new Configuration().configure().buildSessionFactory();  
            sess = fact.openSession();  
             Transaction tr = sess.beginTransaction();  


            Insurance ins = (Insurance)sess.get(Insurance.class, new Long(1));  
           ins.setInsuranceName(2);    
           ins.setInvestementAmount(20000);  
           ins.setInvestementDate(new Date());  
           sess.update(ins);  
           tr.commit();   
           sess.close();  
           System.out.println("Update successfully!");  
        }  
        catch(Exception e){
           System.out.println("If null " + e.getMessage());  
        }  
   }  
 }  


public class Insurance {  

    private long insuranceName;  
    private double investementAmount;  
    private Date investementDate;  

    public long getInsuranceName() {  
        return insuranceName;  
     }  

    public void setInsuranceName(long insuranceName) {  
        this.insuranceName = insuranceName;
     }

    public double getInvestementAmount() {
        return investementAmount;
     }

    public void setInvestementAmount(double investementAmount) {
       this.investementAmount = investementAmount;
     }

    public Date getInvestementDate() {
       return investementDate;
    }

    public void setInvestementDate(Date investementDate) {
       this.investementDate = investementDate;
    }  
}   

insurance.hbm.xml:

 <?xml version="1.0"?>   
 <!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

<hibernate-mapping>  

    <class name="Insurance" table="Insurance">  
        <id name="insuranceName" type="long" column="InsuranceName">  
            <generator class="assigned" />  
        </id>  

        <property name="investementAmount">  
            <column name="InvestementAmount" />  

        </property>  

       <property name="investementDate">  
           <column name="InvestementDate" />  
       </property>  

    </class>  


 </hibernate-mapping>  

Таким образом, я получаю вывод:

Hibernate: выберитеinsurance0_.InsuranceName as Insuranc1_0_, insurance0_.InvestementAmount as Investem2_0_0_, insurance0_.InvestementDate as Investem3_0_0_ из Insurance insurance0_, где insurance0_.InsuranceName =?
Если значение равно NULL

Пожалуйста, предложите решение, которое является нулевым

Спасибо
Снеха

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

Я предлагаю несколько изменений

Тип изменения:

<id name="insuranceName" type="java.lang.Long" column="InsuranceName">  
      <generator class="assigned" />  
</id>

И в классе страхования (POJO)

private Long insuranceName; 

Попробуйте это.

Обновление: Я попробовал ваше сопоставление, оно работает, убедитесь, что у вас есть страховые данные с идентификатором 1 и hibernate.cfg.xml правильный.

0 голосов
/ 28 марта 2012

Трудно сказать точно без трассировки стека, но, скорее всего,

 Insurance ins = (Insurance)sess.get(Insurance.class, new Long(1));

возвращает ноль (такой записи в базе данных нет), поэтому следующая строка создает исключение NullPointerException. Я бы предложил добавить

catch(Exception e){
   System.out.println("If null " + e.getMessage());  
    e.printStackTrace();
}  

к предложению catch, чтобы увидеть, где происходит NPE.

...