Ah, sorry, I lost track of the thread.

On Mon, Jun 22, 2009 at 4:55 PM, Meredith Gregory
<lgreg.mered...@gmail.com>wrote:

> Derek,
>
> You are correct and i noted and reported this on Scala on Friday. However,
> if you have a chain of the form
>
> AbstractClass <- Class <-contains- AbstractClass <-Class <-contains- ...
>
> The @MappedSuperclass solution fails at level 2.
>
> Best wishes,
>
> --greg
>
>
> On Mon, Jun 22, 2009 at 3:52 PM, Derek Chen-Becker 
> <dchenbec...@gmail.com>wrote:
>
>> Something I just want to throw out into the discussion: Since you're using
>> table-per-class, having a @Table annotation on AbstractContainer doesn't do
>> anything since abstract classes can't have instances. Tables are only
>> generated for abstract classes if you're using a JOINED inheritance
>> strategy. You might want to look at using the MappedSuperclass annotation
>> for the abstract base class instead. If I change the AbstractContainer def
>> to:
>>
>> @MappedSuperclass
>> public abstract class AbstractContainer implements java.io.Serializable {
>>
>> and then modify MySampleFuContainer to:
>>
>> public class MySampleFuContainer extends AbstractContainer {
>>
>> then I seem to get the proper schema:
>>
>>     create table lingo_production.MySampleFuContainer_table (
>>         id varchar(255) not null,
>>         uuid varchar(255),
>>         mysamplingmumble__idSuper varchar(255),
>>         primary key (id),
>>         unique (uuid)
>>     );
>>
>>
>> Having said that, I think that the behavior you're currently seeing
>> appears to be a bug.
>>
>> Derek
>>
>>
>> On Mon, Jun 22, 2009 at 3:43 PM, Meredith Gregory <
>> lgreg.mered...@gmail.com> wrote:
>>
>>> Kris,
>>>
>>> Here<http://svn.biosimilarity.com/src/open/codesamples/trunk/hibernate/>is 
>>> a link to the self-contained example that now uses just Java. i included
>>> the target dir in the repo to speed up investigation, but you can just blow
>>> that away and build from scratch. The example is currently written to
>>> Java1.6, but also exhibits the same behavior under Java1.5. To run the
>>> example
>>>
>>> > svn co
>>> http://svn.biosimilarity.com/src/open/codesamples/trunk/hibernate
>>> ...
>>> > env PATH=<path-to-java1.6>:$PATH JAVA_HOME=<path-to-java1.6> mvn clean
>>> compile process-classes
>>>
>>> If you switch comment and decl at line 22 in
>>> src/main/java/maxb/hbex2/MySampleFuContainer.java then you see the error.
>>> The schema goes from
>>>
>>> create table lingo_production.MySampleFuContainer_table (
>>>         id_AbstractContainer varchar(255) not null,
>>>         varchar(255) not null,
>>>         uuid varchar(255),
>>>         mysamplingmumble__idSuper varchar(255),
>>>         primary key (id),
>>>         unique (uuid)
>>>     );
>>>
>>> to
>>>
>>> create table lingo_production.MySampleFuContainer_table (
>>>         id_AbstractContainer varchar(255) not null,
>>>         id varchar(255),
>>>         mysamplingmumble_ tinyblob,
>>>         uuid varchar(255),
>>>         primary key (id_AbstractContainer),
>>>         unique (id_AbstractContainer)
>>>     );
>>>
>>> Best wishes,
>>>
>>> --greg
>>>
>>>
>>> On Mon, Jun 22, 2009 at 1:38 PM, Meredith Gregory <
>>> lgreg.mered...@gmail.com> wrote:
>>>
>>>> Kris,
>>>>
>>>> Thanks for the suggestion. i've now got a tiny little example that
>>>> compiles on its own that illustrates the problem. Changing the inheritance
>>>> strategy to JOINED makes no difference. Hibernate still does the wrong
>>>> thing.
>>>>
>>>> Best wishes,
>>>>
>>>> --greg
>>>>
>>>>
>>>> On Mon, Jun 22, 2009 at 8:55 AM, Kris Nuttycombe <
>>>> kris.nuttyco...@gmail.com> wrote:
>>>>
>>>>> This may be off the mark, but I'm wondering if the reason that you're
>>>>> having difficulty with the parallel inheritance hierarchy problem is
>>>>> not your use of TABLE_PER_CLASS inheritance. In my application, I have
>>>>> a similar construct, but I am using JOINED_TABLE inheritance. This
>>>>> allows for a normal foreign key relationship to be created in the
>>>>> database between C2_table and the base table for CThing, with the
>>>>> result that Hibernate will generate the query for CThing member as a
>>>>> union. Using table per class inheritance, I would expect Hibernate to
>>>>> need to synthesize an additional dtype field in C2_table along with
>>>>> the key column in order to enforce the uniqueness of the keys to the
>>>>> joined entities, and I don't believe that it does this.
>>>>>
>>>>> I'm not sure how the fact that the code is generated is particularly
>>>>> relevant; surely if it's possible to hand-write a successful solution,
>>>>> then your code generator could be made aware of how to construct a
>>>>> viable solution?
>>>>>
>>>>> Kris
>>>>>
>>>>> On Fri, Jun 19, 2009 at 8:47 PM, Meredith
>>>>> Gregory<lgreg.mered...@gmail.com> wrote:
>>>>> > 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 <
>>>>> j...@chen-becker.org>
>>>>> > 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
>>>>> >
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> L.G. Meredith
>>>> Managing Partner
>>>> Biosimilarity LLC
>>>> 1219 NW 83rd St
>>>> Seattle, WA 98117
>>>>
>>>> +1 206.650.3740
>>>>
>>>> http://biosimilarity.blogspot.com
>>>>
>>>
>>>
>>>
>>> --
>>> L.G. Meredith
>>> Managing Partner
>>> Biosimilarity LLC
>>> 1219 NW 83rd St
>>> Seattle, WA 98117
>>>
>>> +1 206.650.3740
>>>
>>> http://biosimilarity.blogspot.com
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> L.G. Meredith
> Managing Partner
> Biosimilarity LLC
> 1219 NW 83rd St
> Seattle, WA 98117
>
> +1 206.650.3740
>
> http://biosimilarity.blogspot.com
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to