skip to Main Content

I have three entity employee , info, and address , i want mapped employee entity with info and address entity by using onetoone mapping by using hibernate and jpa annotation.

@Entity
public class Employee {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  int empId;
    private String name;
    private String email;
    
    @OneToOne(mappedBy = "emp", cascade = CascadeType.ALL)
    private Info info;
    
    @OneToOne(mappedBy = "emp", cascade = CascadeType.ALL)
    private Address address;
//getter and setter


@Entity
public class Info {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  int infoId;
    private String gender;
    private String phone;
    
    @OneToOne
    @JoinColumn(name = "emp_id")
    private Employee emp;

//getter and setter

@Entity
public class Address {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private  int addrId;
    private String street;
    private String city;
    private String country;
    
    @OneToOne
    @JoinColumn(name = "emp_id")
    private Employee emp;
//getter and setter

public class OneToOneApp {

    public static void main(String[] args) {
        
        Configuration configuration = new Configuration();
        configuration.configure("o2omapping.cfg.xml");
        SessionFactory sessionFactory=configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();
         
        Employee employee =new Employee();
        employee.setName("Iqra");
        employee.setEmail("[email protected]");
            
        Address address = new Address();
        address.setStreet("Manda Road");
        address.setCity("Allahabad");
        address.setCountry("India");
        
        Info info = new Info();
        info.setGender("FeMale");
        info.setPhone("12334567");
        
        employee.setInfo(info);
        info.setEmp(employee);
        address.setEmp(employee);
        
        session.save(employee);
        transaction.commit();
        session.close();
    }
}

alter table Info
add constraint FKdjqy16j48ffa2x19eqgx3o8f0
foreign key (emp_id)
references Employee (empId)
Hibernate:
insert
into
Employee
(email, name)
values
(?, ?)
Hibernate:
insert
into
Info
(emp_id, gender, phone)
values
(?, ?, ?)

data not Inserted into address table
why??

2

Answers


  1. It looks like you have correctly set up the one-to-one mapping between the Employee, Info, and Address entities. However, in the OneToOneApp main method, you haven’t set the employee’s address before saving the employee.

    To fix the issue, you need to add the following line in the OneToOneApp main method before saving the employee:

    employee.setAddress(address);
    

    Here’s the updated OneToOneApp main method:

    public class OneToOneApp {
    
        public static void main(String[] args) {
            
            Configuration configuration = new Configuration();
            configuration.configure("o2omapping.cfg.xml");
            SessionFactory sessionFactory=configuration.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
             
            Employee employee =new Employee();
            employee.setName("Iqra");
            employee.setEmail("[email protected]");
                
            Address address = new Address();
            address.setStreet("Manda Road");
            address.setCity("Allahabad");
            address.setCountry("India");
            
            Info info = new Info();
            info.setGender("FeMale");
            info.setPhone("12334567");
            
            employee.setInfo(info);
            info.setEmp(employee);
            
            employee.setAddress(address); // Add this line
            address.setEmp(employee);
            
            session.save(employee);
            transaction.commit();
            session.close();
        }
    }
    

    Now, when you run the updated application, the employee’s address should be inserted into the Address table as well.

    Login or Signup to reply.
  2. he is telling the truth. You have set the address object in the customer class with a One-to-One relationship dependency, but you have not set its information. You should add this after the line employee.setAddress(), employee.setInfo().

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search