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