« Return to Thread: [scala] JPA question

Re: [scala] JPA question

by Meredith Gregory :: Rate this Message:

Reply to Author | View in Thread

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

 « Return to Thread: [scala] JPA question