All,
i had a similar problem and found the source of the issues. Spse you have a container hierarchy (CTop <- C2) side-by-side with a contained hierarchy (CThing <- CThing1). The inheritance at the top of the container hierarchy, CTop, causes hibernate to bail on tracking the relations and punt to embedded values instead. Rewriting the top to be a @MappedSuperClass fixes the problem in this specific case. However, if your hierarchy is deep, you're screwed.
If anybody has a suggestion for a workaround, i'm all ears. The problem is that it would appear that both Mr Crowley and i are generating Java + JPA code. So, the solution needs to be algorithmic and not 1-off.
Perhaps the best solution is to find an alternative to hibernate as this is a particularly irritating bug.
Best wishes,
--greg
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
abstract class CTop {
...
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id_CTop;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
abstract class CThing {
...
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id_CThing;
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name = "C2_table", catalog = "mydb_production", uniqueConstraints = { @UniqueConstraint(columnNames = "uuid") })
class C2 extends CTop {
CThing thing;
...
@OneToOne
@JoinColumn
public CThing getThing() {
return this.thing;
}
public void setThing( CThing thing ) {
this.thing = thing;
}
@Column(name = "uuid", unique = false, nullable = true, insertable = true, updatable = true)
public String getUuid() {
return this.uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "id", unique = false, nullable = true, insertable = true, updatable = true)
public String getId() {
return
this.id;
}
}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Table(name
= "CThing1_table", catalog = "mydb_production",
uniqueConstraints = { @UniqueConstraint(columnNames = "uuid") })
class CThing1 extends CThing {
...
// lots of ground type fields
@Column(name = "uuid", unique = false, nullable = true, insertable = true, updatable = true)
public String getUuid() {
return this.uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "id", unique = false, nullable = true, insertable = true, updatable = true)
public String getId() {
return
this.id;
}
}
On Tue, Jun 16, 2009 at 1:45 PM, Derek Chen-Becker
<java@...> wrote:
John Nilsson wrote:
> Hi,
>
> I think the showSql property has been deprecated in favor of log4j loggers.
>
> If you set the log4j level to TRACE for org.hibernate you'll get
> everything Hibernate has to say about what it is doing. Can't remember
> which one it is, but I know one of the loggers will give you the
> values used in queries at the TRACE level.
Good to know. Thanks!
--
L.G. Meredith
Managing Partner
Biosimilarity LLC
1219 NW 83rd St
Seattle, WA 98117
+1 206.650.3740
http://biosimilarity.blogspot.com