[Example-Lab] Modifying the Attributes of the Embedded Class from Embedding Class in Hibernate 5

There might be situations where you would want to modify the attributes of the embedded class (eg. Address) within an embedding class (eg. User), for instance, changing the database column name for a field.

We can use @AttributeOverride annotation to override the details of a field of the embedded class and then enclose all such @AttributeOverride annotations inside @AttributeOverrides annotation.

If you are not following the tutorials in order, refer to the article http://javajee.com/your-first-hibernate-program-using-hibernate-43 for the basic setup including hibernate configuration file.

This example is a continuation of http://javajee.com/example-lab-embedding-value-types-within-an-entity-cl... we will be modifying the classes in that example to demonstrate @AttributeOverrides and @AttributeOverride.

 

Address Class

We will be using the same Address class used in http://javajee.com/example-lab-embedding-value-types-within-an-entity-cl....

 

User Class

First modify the User class as below:

package com.javajee.hiberex.dto;

 

import javax.persistence.AttributeOverrides;

import javax.persistence.AttributeOverride;

import javax.persistence.Embedded;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.Column;

 

@Entity

public class User {

 

  @Id

  int id;

  private String name;

  @Embedded

  @AttributeOverrides({

    @AttributeOverride(

        name="houseno",

        column=@Column(name="HS_1")

        ),

    @AttributeOverride(

        name="street",

        column=@Column(name="STR_1")

        )

  })

  private Address address1;

  @Embedded

  @AttributeOverrides({

    @AttributeOverride(

        name="houseno",

        column=@Column(name="HS_2")

        ),

    @AttributeOverride(

        name="street",

        column=@Column(name="STR_2")

        )

  })

  private Address address2;

  public Address getAddress1() {

    return address1;

  }

 

  public void setAddress1(Address address1) {

    this.address1 = address1;

  }

 

  public Address getAddress2() {

    return address2;

  }

 

  public void setAddress2(Address address2) {

    this.address2 = address2;

  }

 

  public int getId() {

 

    return id;

 

  }

 

  public void setId(int id) {

 

    this.id = id;

 

  }

 

  public String getName() {

 

    return name;

 

  }

 

  public void setName(String name) {

 

    this.name = name;

  }

}

 

Test Class

To test this we will also modify the user test class as below:

import org.hibernate.Session;

import org.hibernate.SessionFactory;

import org.hibernate.cfg.Configuration;

import com.javajee.hiberex.dto.Address;

import com.javajee.hiberex.dto.User;

 

public class UserTest {

 

  public static void main(String[] args) {

 

    User u = new User();

 

    u.setId(1);

    u.setName("Heartin");

    Address addr = new Address();

    addr.setHouseno(777);

    addr.setStreet("MyStreet");

    u.setAddress1(addr);

    u.setAddress2(addr);

    Configuration configuration = new Configuration();

    configuration.configure();

    ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()

        .applySettings(configuration.getProperties()).build();

    SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry);

    Session session = sessionFactory.openSession();

    session.beginTransaction();

    session.save(u);

    session.getTransaction().commit();

 

//Code to get data is same as before, but to test this change, it is not needed.

  }

}

 

Now execute the class UserTest and you can see the below insert query in the console (if you have set sql_show as true):

Hibernate: insert into User (HS_1, STR_1, HS_2, STR_2, name, id) values (?, ?, ?, ?, ?, ?)

Tags: 

Quick Notes Finder Tags

Activities (1) advanced java (1) agile (3) App Servers (6) archived notes (2) Arrays (1) Best Practices (12) Best Practices (Design) (3) Best Practices (Java) (7) Best Practices (Java EE) (1) BigData (3) Chars & Encodings (6) coding problems (2) Collections (15) contests (3) Core Java (All) (55) course plan (2) Database (12) Design patterns (8) dev tools (3) downloads (2) eclipse (9) Essentials (1) examples (14) Exception (1) Exceptions (4) Exercise (1) exercises (6) Getting Started (18) Groovy (2) hadoop (4) hibernate (77) hibernate interview questions (6) History (1) Hot book (5) http monitoring (2) Inheritance (4) intellij (1) java 8 notes (4) Java 9 (1) Java Concepts (7) Java Core (9) java ee exercises (1) java ee interview questions (2) Java Elements (16) Java Environment (1) Java Features (4) java interview points (4) java interview questions (4) javajee initiatives (1) javajee thoughts (3) Java Performance (6) Java Programmer 1 (11) Java Programmer 2 (7) Javascript Frameworks (1) Java SE Professional (1) JPA 1 - Module (6) JPA 1 - Modules (1) JSP (1) Legacy Java (1) linked list (3) maven (1) Multithreading (16) NFR (1) No SQL (1) Object Oriented (9) OCPJP (4) OCPWCD (1) OOAD (3) Operators (4) Overloading (2) Overriding (2) Overviews (1) policies (1) programming (1) Quartz Scheduler (1) Quizzes (17) RabbitMQ (1) references (2) restful web service (3) Searching (1) security (10) Servlets (8) Servlets and JSP (31) Site Usage Guidelines (1) Sorting (1) source code management (1) spring (4) spring boot (3) Spring Examples (1) Spring Features (1) spring jpa (1) Stack (1) Streams & IO (3) Strings (11) SW Developer Tools (2) testing (1) troubleshooting (1) user interface (1) vxml (8) web services (1) Web Technologies (1) Web Technology Books (1) youtube (1)