Deploy error on generated entities from postgres db
cfuser123 Nov 25, 2007 2:28 PMSo far, so good w/ Seam 2.0. However, whenever I go to deploy the generated from an existing db that we're using, I get the following error;
10:44:45,852 INFO [TableMetadata] table found: public.avt_region_states 10:44:45,852 INFO [TableMetadata] columns: [id, state, code, guideid] 10:44:45,868 WARN [ServiceController] Problem starting service persistence.units:ear=seamtest.ear,unitName=seamtest javax.persistence.PersistenceException: org.hibernate.HibernateException: Wrong column type: guideid, expected: varchar(4) at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:720) at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:127) at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:246) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) : <snip> : 10:44:51,050 ERROR [URLDeploymentScanner] Incomplete Deployment listing: --- MBeans waiting for other MBeans --- ObjectName: persistence.units:ear=seamtest.ear,unitName=seamtest State: FAILED Reason: javax.persistence.PersistenceException: org.hibernate.HibernateException: Wrong column type: guideid, expected: varchar(4) I Depend On: jboss.jca:service=DataSourceBinding,name=seamtestDatasource
Oddly, when we use an older version of the Hibernate tools (using hbm.xml files vs. annotations), it works just fine. What am I missing here? TIA.
Specifics: Postgres 8.2 DB, Seam 2.0GA, Hibernate Tools 3.2.0.b10
The entities in question are;
package com.r.model.seam; // Generated Nov 19, 2007 3:46:16 PM by Hibernate Tools 3.2.0.b10 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinColumns; import javax.persistence.ManyToOne; import javax.persistence.Table; import org.hibernate.validator.Length; import org.hibernate.validator.NotNull; /** * AvtRegionStates generated by hbm2java */ @Entity @Table(name="avt_region_states" ,schema="public" ) public class AvtRegionStates implements java.io.Serializable { private int id; private AvtRegions avtRegions; private String state; public AvtRegionStates() { } public AvtRegionStates(int id, AvtRegions avtRegions, String state) { this.id = id; this.avtRegions = avtRegions; this.state = state; } @Id @Column(name="id", unique=true, nullable=false) @NotNull public int getId() { return this.id; } public void setId(int id) { this.id = id; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumns( { @JoinColumn(name="guideid", nullable=false), @JoinColumn(name="code", nullable=false) } ) @NotNull public AvtRegions getAvtRegions() { return this.avtRegions; } public void setAvtRegions(AvtRegions avtRegions) { this.avtRegions = avtRegions; } @Column(name="state", nullable=false, length=0) @NotNull @Length(max=0) public String getState() { return this.state; } public void setState(String state) { this.state = state; } } package com.r.model.seam; // Generated Nov 19, 2007 3:46:16 PM by Hibernate Tools 3.2.0.b10 import java.util.HashSet; import java.util.Set; import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverrides; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.EmbeddedId; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; import org.hibernate.validator.Length; import org.hibernate.validator.NotNull; /** * AvtRegions generated by hbm2java */ @Entity @Table(name="avt_regions" ,schema="public" ) public class AvtRegions implements java.io.Serializable { private AvtRegionsId id; private AvtGuides avtGuides; private String description; private Set<AvtRegionStates> avtRegionStateses = new HashSet<AvtRegionStates>(0); private Set<AvtResults> avtResultses = new HashSet<AvtResults>(0); public AvtRegions() { } public AvtRegions(AvtRegionsId id, AvtGuides avtGuides, String description) { this.id = id; this.avtGuides = avtGuides; this.description = description; } public AvtRegions(AvtRegionsId id, AvtGuides avtGuides, String description, Set<AvtRegionStates> avtRegionStateses, Set<AvtResults> avtResultses) { this.id = id; this.avtGuides = avtGuides; this.description = description; this.avtRegionStateses = avtRegionStateses; this.avtResultses = avtResultses; } @EmbeddedId @AttributeOverrides( { @AttributeOverride(name="guideid", column=@Column(name="guideid", nullable=false) ), @AttributeOverride(name="code", column=@Column(name="code", nullable=false, length=4) ) } ) @NotNull public AvtRegionsId getId() { return this.id; } public void setId(AvtRegionsId id) { this.id = id; } @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name="guideid", nullable=false, insertable=false, updatable=false) @NotNull public AvtGuides getAvtGuides() { return this.avtGuides; } public void setAvtGuides(AvtGuides avtGuides) { this.avtGuides = avtGuides; } @Column(name="description", nullable=false, length=64) @NotNull @Length(max=64) public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="avtRegions") public Set<AvtRegionStates> getAvtRegionStateses() { return this.avtRegionStateses; } public void setAvtRegionStateses(Set<AvtRegionStates> avtRegionStateses) { this.avtRegionStateses = avtRegionStateses; } @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="avtRegions") public Set<AvtResults> getAvtResultses() { return this.avtResultses; } public void setAvtResultses(Set<AvtResults> avtResultses) { this.avtResultses = avtResultses; } }
The DB schema
-- Table: avt_region_states -- DROP TABLE avt_region_states; CREATE TABLE avt_region_states ( state character varying NOT NULL DEFAULT 64, guideid integer NOT NULL, code character varying(4) NOT NULL, id serial NOT NULL, CONSTRAINT auto_region_states_pk PRIMARY KEY (id), CONSTRAINT auc_reg_states_auc_reg_fk1 FOREIGN KEY (guideid, code) REFERENCES avt_regions (guideid, code) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITHOUT OIDS; ALTER TABLE avt_region_states OWNER TO postgres; -- Index: fki_auc_reg_states_auc_reg_fk1 -- DROP INDEX fki_auc_reg_states_auc_reg_fk1; CREATE INDEX fki_auc_reg_states_auc_reg_fk1 ON avt_region_states USING btree (guideid, code); -- Table: avt_regions -- DROP TABLE avt_regions; CREATE TABLE avt_regions ( guideid integer NOT NULL, code character varying(4) NOT NULL, description character varying(64) NOT NULL, CONSTRAINT auc_regions_pk PRIMARY KEY (guideid, code), CONSTRAINT auc_regions_auc_guides FOREIGN KEY (guideid) REFERENCES avt_guides (avtguideid) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ) WITHOUT OIDS; ALTER TABLE avt_regions OWNER TO postgres;