Newsletter |
Composite Primary Key In Hibernate With Select Query
Hibernate » on Jun 24, 2011 { 25 Comments } By Sivateja
Composite primary keys means having more than one primary key right..?
Example On this__
Files required….
- Product.java (Pojo)
- ForOurLogic4Load.java (for our logic)
- hibernate.cfg.xml
- Product.hbm.xml
All files are same like previous program, but ForOurLogic4Load.java is the new file for loading an object from the database
Product.java
package str; public class Product implements java.io.Serializable{ private static final long serialVersionUID = 1L; private int productId; private String proName; private double price; public void setProductId(int productId) { this.productId = productId; } public int getProductId() { return productId; } public void setProName(String proName) { this.proName = proName; } public String getProName() { return proName; } public void setPrice(double price) { this.price = price; } public double getPrice() { return price; } }
hibernate.cfg.xml
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver </property> <property name="connection.url">jdbc:oracle:thin:@www.java4s.com:1521:XE</property> <property name="connection.username">system</property> <property name="connection.password">admin</property> <property name="dialect">org.hibernate.dialect.OracleDialect</property> <property name="show_sql">true</property> <property name="hbm2ddl.auto">update</property> <mapping resource="Product.hbm.xml"></mapping> </session-factory> </hibernate-configuration>
Product.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="str.Product" table="products"> <composite-id> <key-property name="productId" column="pid" /> <key-property name="price" /> </composite-id> <property name="proName" column="pname" length="10"/> </class> </hibernate-mapping>
ForOurLogic4Load.java
package str; import org.hibernate.*; import org.hibernate.cfg.*; public class ForOurLogic4Load { public static void main(String[] args) { Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xml"); SessionFactory factory = cfg.buildSessionFactory(); Session session = factory.openSession(); Product p=new Product(); p.setProductId(101); p.setPrice(25000); Object o=session.get(Product.class, p); // here p must be an serializable object, Product p1=(Product)o; System.out.println("The price is: "+p1.getProName()); System.out.println("Object Loaded successfully.....!!"); session.close(); factory.close(); } }
Eclipse output
Notes:
- regarding ForOurLogic4Load.java actually for loading an object we have to pass the primary key column value like…
Object o=session.get(Product.class, new Integer(101));
- Actually that is the case with single primary key, but see in this example we are using multiple primary keys (2 primary key values), so while loading an object how we will give two values….?
Object o=session.get(Product.class, new Integer(101,25000));
- π which is absolutely wrong……………!!!!!!!!!
- so how we can pass the multiple primary key values for loading that object.. ?
- First we need to set the values just like in line numbers 19,20 , ensure you are setting the values which already have in the database for that particular object.
- Then we need to pass that object as the parameter to load the object.
Object o=session.get(Product.class, p);
- What am saying is that the second parameter of the get method is always a Serializable object, so in the Product.java line number 3 i just implemented with java.io.Serializable
- Remember, if we have single primary key we used to give
Object o=session.get(Product.class, new Integer(101));
here new Integer(101) is the wrapper, all wrappers are Serializable by default.
β ββ
You Might Also Like
::. About the Author .:: | ||
Comments
25 Responses to “Composite Primary Key In Hibernate With Select Query”
Excellent explanation….thanks
@Srinivas
You bet, thanks for your feedback π
Thanks for the nice expalnation with clarity.
Hai, this is venkatarao , you r really god to me and all java developers. , i love your website(www.java4s.com) . really thanqs . sir please provide webservicess meterial
Very nice explanation.
I stuck up with these in some interviews
Hi Thank you for clear explanation. Actually i have one doubt here,If we have only one single primary key in database table and can we use get method by making the pojo as serializable?
Hi,
Your explanation is very clear,My doubt is without using save() method how could you get data from database by using get() method.
–>what is difference between get() & load().
really excellent explanation regarding serializable object.
thnx a lot..
Hi,
This tutorial was very helpfull…….
Thanks
π
hello boss ur teaching style is very good…can u provide jquery and ajax clealy
Hi,
How to get more than one row data from database.
currently i have got “org.hibernate.HibernateException : More than one row with the given identifier was found: str.Product@b59fd9, for class: str.Product”
when ever i get more than one row of data.
Thanks
Hi Sivateja how r u, I just have one question, what if we have a reference in composite key class, then how can we do mapping in composite-id tag for it.
i.e,
class Address {
private String city;
private String state;
//getters and setters.
}
class CompKey implemenst Serializable {
private String firstName;
private String email;
private Address address;
}
now, how to use address ref. variable in composite-id tag???
Why we write Product p1=(Product)o;……..without directly print object o.ProName();
I want to Know what type of data is there in object o and P1…….please tell me.
thanks a lot.
really,very nice explanation.
Hello Sir ,
Really java4s.com is extremely good and easy to learn the tutorials . . Thanks a lot sir !!
Hi Java4s,
your website is awesome for new comers.
I am having one doubt, is this only for multiple primary key ?
suppose if i want to pass 3 or 4 parameters(those or not primarykey).
what will do for this ?
Excellent website for java learners.. But, one small doubt, why Product class must be serialize ? and without save object how can we get that Object from DB using session.get() method.. PLz let me know..
why composite id class must implement serializable??
Then why single-id class doesn’t need to be Serializable? Could you elaborate on that?
Excellent explanation…thanks π
Good Explanation and thank you. could you please give some example on updating record of a table having composite keys(of varChar type(String)).
HI.
Here i am getting NullPointerException when i am retring the data from DB. can you plz explain
Exception in thread “main” java.lang.NullPointerException
at str.ForOurLogic4Load.main(ForOurLogic4Load.java:27)
Hi..
iam also getting the Exception is
Exception in thread βmainβ java.lang.NullPointerException
at str.ForOurLogic4Load.main(ForOurLogic4Load.java:27)
can u pls help me.
@Prasanna and @Tirupathi
You have update the code in file ForOurLogic4Load.java at line number 20, to p.setProName("iphone") .
As product id and product name are composite primary keys, so we need to pass both the values in order to get price.
One of the best blog to study hibernate.
Thanks
You are amazing dear nice concept other sites are much confusing …