Hello,

 

I’m using Jboss-4.0.5-GA in the ejb3 configuration.  I’m trying to implement the following entities and relationships, without success:

 

Entity: Security

Entity: Trade

Entity: Allocation extends Trade

 

Security->Trade is one-to-many with Trade as the relationship owner

Trade->Security is many-to-one

Security->Allocation is one-to-one with Allocation as the relationship owner

Allocation->Security is one-to-one

 

The basic idea is that while a Security may have a collection of Trades associated with it, at most one can be an Allocation.  And if a Security has an associated Allocation, then that Allocation must appear in the Trades collection of the Security as well.

 

I’ve tried this approach:

 

@Entity public class Security {

             …

             @OneToMany(mappedBy=”security”) public Collection<Trade> getTrades() {…}

             @OneToOne(mappedBy=”security”) public Allocation getAllocation() {…}

}

 

@Entity public abstract class Trade {

             …

             @ManyToOne public Security getSecurity() {…}

}

 

@Entity public class Allocation extends Trade {…}

 

 

When I try to update (merge) an Allocation, the query and error I get from Hibernate look like this:

 

Query:

[org.hibernate.SQL] select allocation0_.id as id9_10_, etc., … where allocation0_.security_id=? and allocation0_.DTYPE='alloc'

 

Error:

[org.hibernate.type.LongType] could not bind value '1st Lien Term Loan' to parameter: 1; com.xyz.entity.Security

 

In the error message, ‘1st Lien Term Loan’ is the toString() value of the associated Security, not it’s long getId() value, as I would have expected.

 

I have also tried giving the one-to-one a different name on the owner side:

 

@Entity public class Security {

             …

             @OneToMany(mappedBy=”security”) public Collection<Trade> getTrades() {…}

             @OneToOne(mappedBy=”issue”) public Allocation getAllocation() {…}

}

 

@Entity public abstract class Trade {

             …

             @ManyToOne public Security getSecurity() {…}

}

 

@Entity public class Allocation extends Trade {

             …

             @OneToOne public Security getIssue() {

                         return super.getSecurity();

             }

}

 

But the result is the same.

 

Does anyone know what the problem is here, or am I using the wrong approach?  Any pointers would be much appreciated.

 

Thanks,

 

wmathews@aladdincapital.com