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 -~----------~----~----~----~------~----~------~--~---