> -----Original Message----- > From: Mansour Al Akeel [mailto:mansour.alak...@gmail.com] > Sent: Montag, 23. Juni 2014 10:23 > To: users > Subject: How to map an ID of a foreign key as a field > > I am looking to map a field in the owner entity to the ID of the target > entity. > For example, taking the Employee -> Department mapping: > > class Employee { > > private String name ; > > private String depId ; > > private Department department ; > > @ManyToOne(fetch = FetchType.EAGER, optional = false) > @JoinColumn(name = "dep_id", referencedColumnName = "id", insertable > = false, updatable = false) public Department getDepartment(){ return > this.department ; } > > > public void setDepId(String depId){ > this.depId = depId; > } > ... > > } > > My Question is, how can I set the Deparment by setting only its dep_id in the > employee object, and keep the foreign key constraints when the tables are > created ?? > > For example: > > Employee emp = new Employee() ; > emp.setId("SOME_ID_1") ; > emp.setDepId("FINANCE"); > > em.persist(emp); > > and if there's no FINANCE record in the department table, then we have an > constraints violation. > > At the same time I don't want to have setters for Department Entity. Only its > ID. > > Thank you.
Hello Mansour, Not sure why you would need the extra Emplyoee.depId. I would do what you would like this way: Employee emp = new Employee() ; emp.setId("SOME_ID_1") ; emp.setDepartment(em.getReference(Employee.class, "FINANCE"); em.persist(emp); >From the JavaDoc: <T> T getReference(java.lang.Class<T> entityClass, java.lang.Object primaryKey) Get an instance, whose state may be lazily fetched. If the requested instance does not exist in the database, the EntityNotFoundException is thrown when the instance state is first accessed. (The persistence provider runtime is permitted to throw the EntityNotFoundException when getReference is called.) The application should not expect that the instance state will be available upon detachment, unless it was accessed by the application while the entity manager was open. Hope this helps. John