I have 2 classes: Driver and Car. Cars table updated in separate process. What I need is to have property in Driver that allows me to read full car description and write only Id pointing to existing Car. Here is example:
@Entity(name = "DRIVER") public class Driver { ... ID and other properties for Driver goes here ..... @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "CAR_ID") private Car car; @JsonView({Views.Full.class}) public Car getCar() { return car; } @JsonView({Views.Short.class}) public long getCarId() { return car.getId(); } public void setCarId(long carId) { this.car = new Car (carId); } }
Car object is just typical JPA object with no back reference to the Driver.
So what I was trying to achieve by this is:
Im getting following error:
object references an unsaved transient instance - save the transient instance before flushing : com.Driver.car -> com.Car
I dont want to update instance of the Car in DB but rather just reference to it from Driver. Any idea how to achieve what I want?
Thank you.
UPDATE: Forgot to mention that the ID of the Car that I pass during creation of the Driver is valid Id of the existing Car in DB.
Many-To-One relation between entities: Where one entity (column or set of columns) is/are referenced with another entity (column or set of columns) which contain unique values. In relational databases these relations are applicable by using foreign key/primary key between tables.
Use the getReference call of the entityManager to load customer object using the id and then set that onto the customer history. In most cases this call would return a proxy with just the id embedded, the customer attributes will not be loaded unless some other method of the customer is invoked.
Sometimes your object or table has no primary key. The best solution in this case is normally to add a generated id to the object and table. If you do not have this option, sometimes there is a column or set of columns in the table that make up a unique value. You can use this unique set of columns as your id in JPA.
In JPA we use the @ManyToMany annotation to model many-to-many relationships. This type of relationship can be unidirectional or bidirectional: In a unidirectional relationship only one entity in the relationship points the other. In a bidirectional relationship both entities point to each other.
You can do this via getReference
call in EntityManager
:
EntityManager em = ...; Car car = em.getReference(Car.class, carId); Driver driver = ...; driver.setCar(car); em.persist(driver);
This will not execute SELECT statement from the database.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With