DEV Community

realNameHidden
realNameHidden

Posted on

2

Hibernate One to Many Example using Annotation

Create the Maven project add mysql , hibernate , lombok dependencies as belows in pom.xml

Directory Structure

Image description

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.test</groupId>
    <artifactId>TimeStamp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>TimeStamp</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.9</maven.compiler.source>
        <maven.compiler.target>1.9</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.6.8.Final</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>

    </dependencies>
</project>
Enter fullscreen mode Exit fullscreen mode

Address.java

package com.test.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table(name = "addrtab")
public class Address {
    @Id
    @Column(name="aid")
    private int addrId;
    private String loc;
    private String pin;

}

Enter fullscreen mode Exit fullscreen mode

*Employee
*

package com.test.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Entity
@Table(name = "emptab")
public class Employee {

    @Id
    @Column(name = "eid")
    private int empId;

    @Column(name = "ename")
    private String empName;

    @Column(name = "esal")
    private double empSal;

    @ManyToOne
    @JoinColumn(name = "adiFk")//fk column
    private Address addr;
}
Enter fullscreen mode Exit fullscreen mode

HibernateUtil.java


package com.test.util;

import java.util.Properties;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment;

import com.test.entity.Address;
import com.test.entity.Employee;

public class HibernateUtil {

    static SessionFactory factory = null;
    static {
        Configuration cfg = new Configuration();

        Properties props = new Properties();
        props.put(Environment.URL, "jdbc:mysql://localhost:3306/new");
        props.put(Environment.USER, "root");
        props.put(Environment.PASS, "root");
        props.put(Environment.SHOW_SQL, true);
        props.put(Environment.FORMAT_SQL, true);
        props.put(Environment.HBM2DDL_AUTO, "update");

        cfg.setProperties(props);
        cfg.addAnnotatedClass(Employee.class);
        cfg.addAnnotatedClass(Address.class);

        factory = cfg.buildSessionFactory();
    }

    public static SessionFactory getSessionFactory() {
        return factory;
    }
    public static Session getSession() {
        return factory.openSession();
    }
}

Enter fullscreen mode Exit fullscreen mode

Test.java

package com.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import com.test.entity.Address;
import com.test.entity.Employee;
import com.test.util.HibernateUtil;

public class Test {
    public static void main(String[] args) {
        Transaction tx = null;
        //get the SessionFactory 
        SessionFactory factory = HibernateUtil.getSessionFactory();
        //get the Session
        Session ses = HibernateUtil.getSession();
        try(factory;ses){
            //begin the tx
            tx = ses.beginTransaction();
            Address addr = new Address();
            addr.setAddrId(101);
            addr.setLoc("pune");
            addr.setPin("431605");

            //emp objects
            Employee e1 = new Employee();
            e1.setEmpId(1);
            e1.setEmpName("Sam");
            e1.setEmpSal(4000.0);
            e1.setAddr(addr);

            Employee e2 = new Employee();
            e2.setEmpId(2);
            e2.setEmpName("Jhon");
            e2.setEmpSal(5000.0);
            e2.setAddr(addr);

            Employee e3 = new Employee();
            e3.setEmpId(3);
            e3.setEmpName("Brock");
            e3.setEmpSal(6000.0);
            e3.setAddr(addr);

            ses.save(addr);         
            ses.save(e1);           
            ses.save(e2);           
            ses.save(e3);


            //commit the tx
            tx.commit();

        }catch(Exception e) {
            e.printStackTrace();
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started