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

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: 

Search the Web

Custom Search

Searches whole web. Use the search in the right sidebar to search only within javajee.com!!!