In previous post, we have seen how to add
collection of objects to an entity. As
you observe output of previous post, join table name, join column id appear by
default. You can tweak join table properties using JoinTable annotation.
@ElementCollection
@JoinTable(name="emp_addresses",
joinColumns=@JoinColumn(name="emp_id"))
List<Address>
addresses;
Above
snippet gives name of join table as emp_addresses and join column as emp_id.
package myFirstHibernate; import javax.persistence.Embeddable; @Embeddable public class Address { private String street; private String city; private String state; private String PIN; private String country; public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getState() { return state; } public void setState(String state) { this.state = state; } public String getPIN() { return PIN; } public void setPIN(String pIN) { PIN = pIN; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
package myFirstHibernate; import java.util.List; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.JoinTable; import javax.persistence.JoinColumn; @Entity public class Employee { @Id private int id; private String firstName; private String lastName; @ElementCollection @JoinTable(name="emp_addresses", joinColumns=@JoinColumn(name="emp_id")) List<Address> addresses; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public List<Address> getAddresses() { return addresses; } public void setAddresses(List<Address> addresses) { this.addresses = addresses; } }
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database Connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost/sample</property> <property name="connection.username">root</property> <property name="connection.password">tiger</property> <!-- Enable the logging of all the generated SQL statements to the console --> <property name="show_sql">true</property> <!-- Format the generated SQL statement to make it more readable, --> <property name="format_sql">false</property> <!-- Hibernate will put comments inside all generated SQL statements to hint what’s the generated SQL trying to do --> <property name="use_sql_comments">false</property> <!-- This property makes Hibernate generate the appropriate SQL for the chosen database. --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create</property> <!-- mappings for annotated classes --> <mapping class="myFirstHibernate.Employee" /> </session-factory> </hibernate-configuration>
package myFirstHibernate; import java.util.ArrayList; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; public class TestEmployee { /* Step 1: Create session factory */ private static SessionFactory getSessionFactory() { Configuration configuration = new Configuration().configure(); StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder(). applySettings(configuration.getProperties()); SessionFactory factory = configuration.buildSessionFactory(builder.build()); return factory; } public static void main(String args[]){ Employee emp1 = new Employee(); emp1.setId(1); emp1.setFirstName("Hari Krishna"); emp1.setLastName("Gurram"); Address addr1 = new Address(); addr1.setCity("Bangalore"); addr1.setCountry("India"); addr1.setPIN("560037"); addr1.setState("Karnataka"); addr1.setStreet("Chowdeswari street"); Address addr2 = new Address(); addr2.setCity("Ongole"); addr2.setCountry("India"); addr2.setPIN("523169"); addr2.setState("Andhra Pradesh"); addr2.setStreet("Punuru"); List<Address> addrList = new ArrayList<Address> (); addrList.add(addr1); addrList.add(addr2); emp1.setAddresses(addrList); /* To persisit data */ SessionFactory sessionFactory = getSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); session.save(emp1); session.getTransaction().commit(); session.close(); } }
Output
Hibernate: alter table emp_addresses drop foreign key FK_o3skpa21dhfq096yt91cm0x50 Hibernate: drop table if exists Employee Hibernate: drop table if exists emp_addresses Hibernate: create table Employee (id integer not null, firstName varchar(255), lastName varchar(255), primary key (id)) Hibernate: create table emp_addresses (emp_id integer not null, PIN varchar(255), city varchar(255), country varchar(255), state varchar(255), street varchar(255)) Hibernate: alter table emp_addresses add constraint FK_o3skpa21dhfq096yt91cm0x50 foreign key (emp_id) references Employee (id) Dec 21, 2014 10:07:49 AM org.hibernate.tool.hbm2ddl.SchemaExport execute INFO: HHH000230: Schema export complete Hibernate: insert into Employee (firstName, lastName, id) values (?, ?, ?) Hibernate: insert into emp_addresses (emp_id, PIN, city, country, state, street) values (?, ?, ?, ?, ?, ?) Hibernate: insert into emp_addresses (emp_id, PIN, city, country, state, street) values (?, ?, ?, ?, ?, ?)
MySQL
structure looks like below.
mysql> describe employee; +-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | firstName | varchar(255) | YES | | NULL | | | lastName | varchar(255) | YES | | NULL | | +-----------+--------------+------+-----+---------+-------+ 3 rows in set (0.01 sec) mysql> describe emp_addresses; +---------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+--------------+------+-----+---------+-------+ | emp_id | int(11) | NO | MUL | NULL | | | PIN | varchar(255) | YES | | NULL | | | city | varchar(255) | YES | | NULL | | | country | varchar(255) | YES | | NULL | | | state | varchar(255) | YES | | NULL | | | street | varchar(255) | YES | | NULL | | +---------+--------------+------+-----+---------+-------+ 6 rows in set (0.01 sec) mysql> select * from employee; +----+--------------+----------+ | id | firstName | lastName | +----+--------------+----------+ | 1 | Hari Krishna | Gurram | +----+--------------+----------+ 1 row in set (0.00 sec) mysql> select * from emp_addresses; +--------+--------+-----------+---------+----------------+--------------------+ | emp_id | PIN | city | country | state | street | +--------+--------+-----------+---------+----------------+--------------------+ | 1 | 560037 | Bangalore | India | Karnataka | Chowdeswari street | | 1 | 523169 | Ongole | India | Andhra Pradesh | Punuru | +--------+--------+-----------+---------+----------------+--------------------+ 2 rows in set (0.00 sec)
No comments:
Post a Comment