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
>

Reply via email to