Зачем обновлять hibernate после вставки записи в таблицу - PullRequest
1 голос
/ 09 марта 2019

У меня есть две сущности CompanyDetail и DriverDetail

CompanyDetail

package com.javarnd.pns.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
@Table(name="company_detail")
public class CompanyDetails {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="company_id")
    private long companyId;

    @Column(name="company_name")
    private String companyName;

    @Column(name="pan_no")
    private String panNo;

    private String website;

    private String email;

    @Column(name="conntact_no")
    private String contactNo;

    @OneToMany(cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinTable(name = "COMPANY_VEHICLE_DETAIL", joinColumns = @JoinColumn(name = "company_id"), inverseJoinColumns = @JoinColumn(name = "vehicle_id"))
    private List<Vehicle> vehicleList;

    @OneToMany(cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinTable(name = "COMPANY_DRIVER_DETAIL", joinColumns = @JoinColumn(name = "company_id"), inverseJoinColumns = @JoinColumn(name = "driver_id"))
    private List<DriverDetail> driverList;

    @Column(name="type")
    private String companyType;
    public long getCompanyId() {
        return companyId;
    }

    public void setCompanyId(long companyId) {
        this.companyId = companyId;
    }

    public String getCompanyName() {
        return companyName;
    }

    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }

    public String getPanNo() {
        return panNo;
    }

    public void setPanNo(String panNo) {
        this.panNo = panNo;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getContactNo() {
        return contactNo;
    }

    public void setContactNo(String contactNo) {
        this.contactNo = contactNo;
    }

    public String getCompanyType() {
        return companyType;
    }

    public void setCompanyType(String companyType) {
        this.companyType = companyType;
    }

    public List<Vehicle> getVehicleList() {
        return vehicleList;
    }

    public void setVehicleList(List<Vehicle> vehicleList) {
        this.vehicleList = vehicleList;
    }

    public List<DriverDetail> getDriverList() {
        return driverList;
    }

    public void setDriverList(List<DriverDetail> driverList) {
        this.driverList = driverList;
    }

}

DriverDetail

package com.javarnd.pns.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;

@Entity
public class DriverDetail {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="driver_id")
    private long id;

    private String name;

    @Column(name="contact_no")
    private String contactNo;

    @Column(name="license_no")
    private String licenseNo;

    @ManyToMany(mappedBy="availableDriverList",cascade=CascadeType.ALL)
    private List<Vehicle> asignedVehicle;

    @OneToOne(cascade=CascadeType.ALL)
    @JoinColumn(name="company_id")
    private CompanyDetails companyDetail;

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getContactNo() {
        return contactNo;
    }

    public String getLicenseNo() {
        return licenseNo;
    }

    public void setLicenseNo(String licenseNo) {
        this.licenseNo = licenseNo;
    }

    public List<Vehicle> getAsignedVehicle() {
        return asignedVehicle;
    }

    public void setAsignedVehicle(List<Vehicle> asignedVehicle) {
        this.asignedVehicle = asignedVehicle;
    }

    public CompanyDetails getCompanyDetail() {
        return companyDetail;
    }

    public void setCompanyDetail(CompanyDetails companyDetail) {
        this.companyDetail = companyDetail;
    }

    public void setContactNo(String contactNo) {
        this.contactNo = contactNo;
    }


}

MAIN TEST CLASS

package com.javarnd.pns.test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.javarnd.pns.model.CompanyDetails;
import com.javarnd.pns.model.DriverDetail;
import com.javarnd.pns.service.CompanyDetailService;
import com.javarnd.pns.service.DriverDetailService;

public class TestPns {
    public static void main(String[] args) {
        CompanyDetailService cdService=new CompanyDetailService();
        CompanyDetails cd=new CompanyDetails();
        List<DriverDetail>ddList=new ArrayList<>();
        DriverDetail driver=new DriverDetail();
        DriverDetailService dds=new DriverDetailService();
        Scanner kb=new Scanner(System.in);

        System.out.println("Enter name:");
        String cname=kb.nextLine();
        driver.setName(cname);

        System.out.println("Enter Compnay Id");
        long companyId=kb.nextLong();
        cd.setCompanyId(companyId);

        System.out.println("Enter License:");
        String license=kb.next();
        driver.setLicenseNo(license);

        System.out.println("Enter Contact");    
        String contact=kb.nextLine();
        driver.setContactNo(contact);


        ddList.add(driver);
        cd.setDriverList(ddList);

        driver.setCompanyDetail(cd);
        dds.save(driver);


        System.out.println("saved");
    }
}

И теперь я проверил это из моего основного класса, он напечатал журнал, в который вставил значения в таблицу DriverDetail и обновил company_detail table и, наконец, затем вставьте значения в COMPANY_DRIVER_DETAIL table

Наконец, консоль LOG

Hibernate: 
    select
        next_val as id_val 
    from
        hibernate_sequence for update

Hibernate: 
    update
        hibernate_sequence 
    set
        next_val= ? 
    where
        next_val=?
Hibernate: 
    /* insert com.javarnd.pns.model.DriverDetail
        */ insert 
        into
            DriverDetail
            (company_id, contact_no, license_no, name, driver_id) 
        values
            (?, ?, ?, ?, ?)
Hibernate: //HERE IT IS UPDATING THE CompanyDetail , MAIKING ALL FIELDS NULL
    /* update
        com.javarnd.pns.model.CompanyDetails */ update
            company_detail 
        set
            company_name=?,
            type=?,
            conntact_no=?,
            email=?,
            pan_no=?,
            website=? 
        where
            company_id=?
Hibernate: 
    /* delete collection com.javarnd.pns.model.CompanyDetails.driverList */ delete 
        from
            COMPANY_DRIVER_DETAIL 
        where
            company_id=?
Hibernate: 
    /* delete collection com.javarnd.pns.model.CompanyDetails.vehicleList */ delete 
        from
            COMPANY_VEHICLE_DETAIL 
        where
            company_id=?
Hibernate: 
    /* insert collection
        row com.javarnd.pns.model.CompanyDetails.driverList */ insert 
        into
            COMPANY_DRIVER_DETAIL
            (company_id, driver_id) 
        values
            (?, ?)

После этого все идет хорошо, за исключением того, что данные соответствуютопределенного идентификатора в таблице Country_detail все равно NULL, и я не хочу получать данные от имени идентификатора, а затем передавать объект в driver.setCompanyDetail(cd);, потому что это каким-то образом снижает производительность, мне нужно знать способне поддавайтесь этому ненужному обновлению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...