Hi,
I'm trying to upgrade my application from OpenJPA implementation 1.0.1 which was using JPA 1.0 to Hibernate 5.1.2
I'm getting nullpointer exception when trying to to call geResultList on a Entity class.
My Sample classes are below: (I've changed the class names as I can not share my original source code. But the mapping are same.)
1) Class Charger (Representing a sort of mobile charger that has 2 Pin) {code} @Entity @Table(name = "Charger") public class Charger ChargerEntityExt5 extends ChargerEntityAbstract ChargerEntity1Abstract implements Serializable { @ Transient private static final long serialVersionUID = -1L; @ OneToMany(mappedBy=" charger chargerEntityExt5 ",targetEntity= PinEntityExt2 PortEntityExt5 .class, fetch=FetchType.EAGER) @Fetch(value = FetchMode.SUBSELECT) public List< PinEntityExt2 PinEntityExt5 > pinEntityExtList; public List< PinEntityExt2 PinEntityExt5 > getPinEntityExtList() { return pinEntityExtList; }
public void setPinEntityExtList(List< PinEntityExt2 PinEntityExt5 > pinEntityExtList) { this.pinEntityExtList = pinEntityExtList; } } {code}
2) {code} @MappedSuperclass public class ChargerEntityAbstract ChargerEntity1Abstract implements Serializable {
private static final long serialVersionUID = 1L;
@Id @Column(name="ID") private public Long Id; @Column(name="CHARGER_ID" , nullable = true ) private public String chargerId;
// *** Constructor **** public ChargerEntityAbstract ChargerEntity1Abstract () { }
// *** Getter and Setters *** @Override public String toString() { return "ChargerEntity [cpeId=" + Id!=null? Id.toString():"" + ", chargerId=" + chargerId!=null? chargerId.toString():"" + "]"; }
public Long getId() { return this. Id; } public void setId(Long Id id ) { this. Id = Id id ; }
public String getChargerId() { return chargerId; }
public void setChargerId(String chargerId) { this.chargerId = chargerId; } } {code}
3) every charger has 2 pins so I've declared a bi-directional one to many mapping between Charger and pin. {code} @Entity @Table(name = "PIN") public class PinEntityExt2 PinEntityExt5 extends PinEntityAbstract PinEntity1Abstract implements Serializable{
@Transient private static final long serialVersionUID = -1L; @ManyToOne(optional=false) @NotFound(action = NotFoundAction.IGNORE) @JoinColumn(name="CHARGER_ID", referencedColumnName="CHARGER_ID", insertable= false, updatable = false) private Charger charger ChargerEntityExt5 chargerEntityExt5 ; public Charger getCharger ChargerEntityExt5 getChargerEntityExt5 () { return this.charger chargerEntityExt5 ; }
public void setCharger setChargerEntityExt5 ( Charger charger ChargerEntityExt5 chargerEntityExt5 ) { this. charger chargerEntityExt5 = charger chargerEntityExt5 ; } } {code}
4) PIN Entity has 2 properties. CHARGER_ID and PIN_NUMBER. this 2 field defines one record in the PIN table uniquely. So I've declared a IDclass (ChargerPin) for representing the composite key {code} @MappedSuperclass @IdClass(ChargerPin.class) public class PinEntityAbstract PinEntity1Abstract implements Serializable{ @Transient private static final long serialVersionUID = 1L; @Id @Column(name="CHARGER_ID", nullable = true) private public String chargerId; @Id @Column(name="PIN_NUMBER", nullable = true) private public Long pinNumber pin ; public PinEntity1Abstract() { }
@Override public String toString() { return "PinEntity [chargerId=" + chargerId + ", port=" + pin!=null? pin.toString():"" + "]"; }
public String getChargerId() { return chargerId; }
public void setChargerId(String chargerId) { this.chargerId = chargerId; }
public Long getPinNumber getPin () { return pinNumber pin ; }
public void setPinNumber setPin (Long pinNumber pin ) { this. pinNumber pin = pinNumber pin ; }
} {code} {code} public class ChargerPin implements java.io.Serializable{
@Transient private static final long serialVersionUID = 1L;
private String chargerId; private Long pinNumber pin ;
// **** Constructor ***** public ChargerPin() { } public ChargerPin(String chargerId kapId , Long pinNumber port ) { this.chargerId = chargerId kapId ; this. pinNumber pin = pinNumber port ; }
@Override public String getChargerId toString () { return "kapId [ chargerId ; }
public void setChargerId(String =" + chargerId ) { this.chargerId ! = null? chargerId ; }
public Long getPinNumber .toString () { :"" + return pinNumber; }
public void setPinNumber ", port=" + pin!=null? pin.toString ( Long pinNumber ) { this.pinNumber = pinNumber :"" + "]" ; } @Override public int hashCode() { final int prime = 31; int result = 1; int chargerId kap = chargerId != null ?(Integer.parseInt(chargerId)):0; int pinNumber kap_port = pinNumber pin !=null?( pinNumber pin ).intValue():0; result = prime * result + chargerId kap ; result = prime * result + pinNumber kap_port ; return result; }
@Override public boolean equals(Object obj) { //return ((o instanceof CpePort) && (kapId.equalsIgnoreCase(((CpePort) o).getKapId())) && (port == (((CpePort) o).getPort()))); if (this == obj) return true; if (obj == null) return false; if (!(obj instanceof ChargerPin CpePort1 )) return false; ChargerPin other = (ChargerPin) obj; if (chargerId == null) { if (other.chargerId != null) return false; } else if ( (other.chargerId ! = null) && chargerId.equals(other.chargerId)) { return false; } if ( pinNumber pin == null) { if (other. pinNumber pin != null) return false; } else if ( pinNumber (other.pin != null) && (pin != other. pinNumber pin ) ) return false; return true; } public String getChargerId() { return chargerId; }
public void setChargerId(String chargerId) { this.chargerId = chargerId; }
public Long getPin() { return pin; }
public void setPin(Long pin) { this.pin = pin; } } {code}
5) Now while I'm invoking the below query I'm getting a nullPointer exception with Empty satck trace. {code} public class HibernateTestClass {
/** * @param args */ public static EntityManagerFactory entityManagerFactory; public static void main(String[] args) { // TODO Auto-generated method stub
EntityManager em = null; List< Charger ChargerEntityExt5 > ChargerList = null; Query query = null; String queryString = "SELECT ce FROM Charger ChargerEntityExt5 ce WHERE ce.chargerId=?1 "; try { try { em = getChargerEntityManager createEntityManager (); } catch (Exception e) { System.out.println(e); }
query = em.createQuery(queryString); query.setParameter(1, "110284026"); ChargerList = query.getResultList(); System.out.println(ChargerList.size()); } catch (IllegalStateException e) { log System . error out.println (e); } catch (IllegalArgumentException e) { log System . error out.println (e); } catch (Exception e) { log System . error out.println (e); } finally{ closeEntityManager( em .close( ); } }
public static EntityManager createEntityManager() { entityManagerFactory = Persistence.createEntityManagerFactory("polcaincapu"); return entityManagerFactory.createEntityManager(); } } { code}
Can you please help me here look into this bug . IS there anything wrong with the COMPOSITE Key implementation. Earlier I was trying with Hibernate 5.1.1. version and then the code was throwing error as "Error accessing field by reflection for persistent property". Then I changed the code base to use Hibernate version 5.1.2 and then without change of source code the exception got changed into Nullpointer exception. |
|