I have an entity, E2, that contains a many-to-one relationship with E1 like
this:

// assume E1's primary key column is x
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "x", referencedColumnName = "x", insertable = false,
updatable = false)
private E1 e1;

Then in E2 I also have a field like this:

@Column(name = "x")
private int x;

When I first create an instance of E2, I set x to, say, 5.  Let's assume we
know that E1 exists in the database under a primary key of x = 5 as well.

If I examine the unpersisted/transient E2 instance, I can see that x indeed
is 5, and e1 is null, as I'd expect.

Now--we're on the server side for all this--I do this:

e2 = this.em.merge(e2);
this.em.flush();

After the flush, I would expect that:
e2 would be persisted
e2 would have its x = 5 (unchanged)
e2.e1 would be NON NULL.  That is if I did: e2.getE1(); I'd get back a
non-null return value.

But instead I am seeing that e2.e1 is null.

Is this expected behavior?

What I'm looking for is the ability for someone to create an E2 without an
E1 in hand, pass it in to my EJB method, where I will--using lazy
loading--"inflate" the E1 relationship.  I can't figure out how to make this
happen.

Thanks,
Laird

Reply via email to