John, the classes are not in the same persistence unit. So even getReference will not work.
Thank you. On Mon, Jun 23, 2014 at 7:49 AM, Boblitz John <john.bobl...@bertschi.com> wrote: > > -----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 >