If this can not be done in JPA I will appreciate it if someone can let me
know.




On Mon, Jun 23, 2014 at 9:24 AM, Mansour Al Akeel <mansour.alak...@gmail.com
> wrote:

> 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