Quick Contact

    Hibernate

    Hibernate Component Mapping

    Here we see how to embed one entity inside another entity, so they are mapped to a single table. With Hibernate we can use the @Embeddable annotation to mark a class to be eligible as an embeddable class. We can use the @Embedded annotation to embed an embeddable class. The attributes of an embedded class can be overridden using the @AttributeOverrides and the @AttributeOverride annotations. Let’s see how this works, by following a complete example.

    Add jar Dependencies to pom.xml

    We use Apache Maven to manage the project’s dependencies. Add the following dependencies to your projects pom.xml file.

    < 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>
    < parent>
    < groupId>net.ducatindia.hibernate< /groupId>
    < artifactId>hibernate-tutorial< /artifactId>
    < version>0.0.1-SNAPSHOT< /version>
    < /parent>
    < artifactId>hibernate-Embaddable-example< /artifactId>
    < properties>
    < project.build.sourceEncoding>UTF-8< /project.build.sourceEncoding>
    < /properties>
    < dependencies>
    < !-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    < dependency>
    < groupId>mysql< /groupId>
    < artifactId>mysql-connector-java< /artifactId>
    < version>8.0.13< /version>
    < /dependency>
    < !-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
    < dependency>
    < groupId>org.hibernate< /groupId>
    < artifactId>hibernate-core< /artifactId>
    < version>5.3.7.Final< /version>
    < /dependency>
    < /dependencies>
    < build>
    < sourceDirectory>src/main/java< /sourceDirectory>
    < plugins>
    < plugin>
    < artifactId>maven-compiler-plugin< /artifactId>
    < version>3.5.1< /version>
    < configuration>
    < source>1.8< /source>
    < target>1.8< /target>
    < /configuration>
    < /plugin>
    < /plugins>
    < /build>
    < /project>
    

    Creating an Embeddable Class using @Embeddable

    Let’s create Address and Name classes as Embeddable Class. The advantage of using embedded objects is that they are reusable and you can map two entities to the same database table.

    packagenet.ducatindia.hibernate.entity;
    
    importjavax.persistence.Embeddable;
    
    @Embeddable
    publicclassAddress {
    privateString addressLine1;
    
    privateString addressLine2;
    
    privateString city;
    
    privateString state;
    
    privateString country;
    
    privateStringzipCode;
    
    publicAddress() {
    
        }
    
    publicAddress(StringaddressLine1, StringaddressLine2, Stringcity, Stringstate, Stringcountry,
    StringzipCode) {
    this.addressLine1 = addressLine1;
    this.addressLine2 = addressLine2;
    this.city= city;
    this.state= state;
    this.country= country;
    this.zipCode=zipCode;
        }
    
    publicStringgetAddressLine1() {
    return addressLine1;
        }
    
    publicvoidsetAddressLine1(StringaddressLine1) {
    this.addressLine1 = addressLine1;
        }
    
    publicStringgetAddressLine2() {
    return addressLine2;
        }
    
    publicvoidsetAddressLine2(StringaddressLine2) {
    this.addressLine2 = addressLine2;
        }
    
    publicStringgetCity() {
    return city;
        }
    
    publicvoidsetCity(Stringcity) {
    this.city= city;
        }
    
    publicStringgetState() {
    return state;
        }
    
    publicvoidsetState(Stringstate) {
    this.state= state;
        }
    
    publicStringgetCountry() {
    return country;
        }
    
    publicvoidsetCountry(Stringcountry) {
    this.country= country;
        }
    
    publicStringgetZipCode() {
    returnzipCode;
        }
    
    publicvoidsetZipCode(StringzipCode) {
    this.zipCode=zipCode;
        }
    }
    
    Name.java
    packagenet.ducatindia.hibernate.entity;
    
    importjavax.persistence.Embeddable;
    
    @Embeddable
    publicclassName {
    privateStringfirstName;
    
    privateStringmiddleName;
    
    privateStringlastName;
    
    publicName() {
    
        }
    
    publicName(StringfirstName, StringmiddleName, StringlastName) {
    this.firstName=firstName;
    this.middleName=middleName;
    this.lastName=lastName;
        }
    
    publicStringgetFirstName() {
    returnfirstName;
        }
    
    publicvoidsetFirstName(StringfirstName) {
    this.firstName=firstName;
        }
    
    publicStringgetMiddleName() {
    returnmiddleName;
        }
    
    publicvoidsetMiddleName(StringmiddleName) {
    this.middleName=middleName;
        }
    
    publicStringgetLastName() {
    returnlastName;
        }
    
    publicvoidsetLastName(StringlastName) {
    this.lastName=lastName;
        }
    }
    

    Embedding an Embeddable object with @Embedded

    We can simply embed an embeddable class using the @Embedded annotation. This class will be embedded in the same database table as the source. We can optionally override the attributes of the embedded class using the @AttributeOverrides and @AttributeOverride annotation. Let’s create User class and embed Address and Name classes into it using the @Embedded annotation:

    packagenet.ducatindia.hibernate.entity;
    
    importjavax.persistence.*;
    
    /**
     * Created by ramesh
     */
    @Entity
    @Table(name="users")
    publicclassUser {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    privateLong id;
    
    @Embedded
    privateNamename;
    
    privateString email;
    
    @Embedded
    @AttributeOverrides(value= {
    @AttributeOverride(name="addressLine1", column=@Column(name="house_number")),
    @AttributeOverride(name="addressLine2", column=@Column(name="street"))
        })
    privateAddressaddress;
    
    publicUser() {
    
        }
    
    publicUser(Namename, Stringemail, Addressaddress) {
    this.name = name;
    this.email= email;
    this.address= address;
        }
    
    publicLonggetId() {
    return id;
        }
    
    publicvoidsetId(Longid) {
    this.id = id;
        }
    
    publicNamegetName() {
    return name;
        }
    
    publicvoidsetName(Namename) {
    this.name = name;
        }
    
    publicStringgetEmail() {
    return email;
        }
    
    publicvoidsetEmail(Stringemail) {
    this.email= email;
        }
    
    publicAddressgetAddress() {
    return address;
        }
    
    publicvoidsetAddress(Addressaddress) {
    this.address= address;
        }
    }
    

    Create a Hibernate configuration file – Java Configuration

    The HibernateUtil Java configuration file contains information about the database and mapping file.

    Let’s create a HibernateUtil file and write the following code in it.

    packagenet.ducatindia.hibernate.util;
    
    importjava.util.Properties;
    
    importorg.hibernate.SessionFactory;
    importorg.hibernate.boot.registry.StandardServiceRegistryBuilder;
    importorg.hibernate.cfg.Configuration;
    importorg.hibernate.cfg.Environment;
    importorg.hibernate.service.ServiceRegistry;
    
    importnet.ducatindia.hibernate.entity.Student;
    
    publicclassHibernateUtil {
    privatestaticSessionFactorysessionFactory;
    publicstaticSessionFactorygetSessionFactory() {
    if (sessionFactory==null) {
    try {
    Configurationconfiguration=newConfiguration();
    
    // Hibernate settings equivalent to hibernate.cfg.xml's properties
    Properties settings =newProperties();
    settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver");
    settings.put(Environment.URL, "jdbc:mysql://localhost:3306/hibernate_db?useSSL=false");
    settings.put(Environment.USER, "root");
    settings.put(Environment.PASS, "root");
    settings.put(Environment.DIALECT, "org.hibernate.dialect.MySQL5Dialect");
    
    settings.put(Environment.SHOW_SQL, "true");
    
    settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread");
    
    settings.put(Environment.HBM2DDL_AUTO, "create-drop");
    
    configuration.setProperties(settings);
    
    configuration.addAnnotatedClass(Student.class);
    
    ServiceRegistryserviceRegistry=newStandardServiceRegistryBuilder()
                        .applySettings(configuration.getProperties()).build();
    
    sessionFactory=configuration.buildSessionFactory(serviceRegistry);
                } catch (Exception e) {
    e.printStackTrace();
                }
            }
    returnsessionFactory;
        }
    }
    

    Running and Testing Embeddable Objects

    When we execute the following application, a record will be added to the database.

    packagenet.ducatindia.hibernate;
    
    importorg.hibernate.Session;
    importorg.hibernate.Transaction;
    
    importnet.ducatindia.hibernate.entity.Address;
    importnet.ducatindia.hibernate.entity.Name;
    importnet.ducatindia.hibernate.entity.User;
    importnet.ducatindia.hibernate.util.HibernateUtil;
    
    publicclassApp {
    publicstaticvoidmain(String[] args) {
    
    Namename=newName("Rajan", "M", "sharma");
    Addressaddress=newAddress("123", "Civil lines", "Allahabad", "UP", "India", "211001");
    Useruser=newUser(name, "Rajan@gmail.com", address);
    
    Transactiontransaction=null;
    try (Sessionsession=HibernateUtil.getSessionFactory().openSession()) {
    // start a transaction
    transaction=session.beginTransaction();
    // save the student object
    session.save(user);
    // commit transaction
    transaction.commit();
            } catch (Exception e) {
    if (transaction !=null) {
    transaction.rollback();
                }
    e.printStackTrace();
            }
        }
    }
    

    Apply now for Advanced Java Training Course

    Copyright 1999- Ducat Creative, All rights reserved.

    Anda bisa mendapatkan server slot online resmi dan terpercaya tentu saja di sini. Sebagai salah satu provider yang menyediakan banyak pilihan permainan.