Thanks. I will try that. I will still be completely stuck populating the database with pre-existing "entities", if you know what I mean. I know I could write a class that is application-scoped and use the @PostConstruct annotation to do some preliminary work, like creating entities using the entity manager. But I have like 60-70 records in that database in like 6 or 7 tables and no way to turn those database records into Java code that simulated the new Entity(x,x,x,x,x); nomenclature. And I really don't want to type all of that up. Makes sense?
Kay > On Apr 24, 2015, at 11:16 AM, Jody Grassel <[email protected]> wrote: > > @Size is a bean validation annotation, which is not going to govern > schema. Try adding length=1 to your @Column annotation for discountCode > > @Id > @Basic(optional = false) // not really necessary as @Ids are always > non-optional > @NotNull > @Size(min = 1, max = 1) > @Column(name = "DISCOUNT_CODE"*, length=1*) > private String discountCode; > > On Fri, Apr 24, 2015 at 11:08 AM, Kay Wrobel <[email protected]> wrote: > >> Thank you. Just tried that, but I'm running into errors when it tries to >> create a table for an entity that is supposed to become a CHAR(1) field >> based on the annotations in the entity, but it tries to generate the field >> as CHAR(255), which it complains about. Here is a snippet of the entity and >> the log messages: >> >>> @Entity >>> @Table(name = "DISCOUNT_CODE") >>> @XmlRootElement >>> @NamedQueries({ >>> @NamedQuery(name = "DiscountCode.findAll", query = "SELECT d FROM >> DiscountCode d"), >>> @NamedQuery(name = "DiscountCode.findByDiscountCode", query = >> "SELECT d FROM DiscountCode d WHERE d.discountCode = :discountCode"), >>> @NamedQuery(name = "DiscountCode.findByRate", query = "SELECT d FROM >> DiscountCode d WHERE d.rate = :rate")}) >>> public class DiscountCode implements Serializable { >>> private static final long serialVersionUID = 1L; >>> @Id >>> @Basic(optional = false) >>> @NotNull >>> @Size(min = 1, max = 1) >>> @Column(name = "DISCOUNT_CODE") >>> private String discountCode; >>> // @Max(value=?) @Min(value=?)//if you know range of your decimal >> fields consider using these annotations to enforce field validation >>> @Column(name = "RATE") >>> private BigDecimal rate; >>> @OneToMany(cascade = CascadeType.ALL, mappedBy = "discountCode", >> fetch = FetchType.EAGER) >>> private Collection<Customer> customerCollection; >> >> >>> SEVERE: EjbTransactionUtil.handleSystemException: The length, precision, >> or scale attribute for column, or type mapping 'CHAR(255)' is not valid. >> {stmnt 971815908 CREATE TABLE PRODUCT_CODE -- ProductCode >>> (PROD_CODE VARCHAR(255) NOT NULL, DESCRIPTION VARCHAR(255), >> DISCOUNT_CODE CHAR(255), PRIMARY KEY (PROD_CODE))} [code=30000, state=42611] >>> <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 nonfatal general error> >> org.apache.openjpa.persistence.PersistenceException: The length, precision, >> or scale attribute for column, or type mapping 'CHAR(255)' is not valid. >> {stmnt 971815908 CREATE TABLE PRODUCT_CODE -- ProductCode >>> (PROD_CODE VARCHAR(255) NOT NULL, DESCRIPTION VARCHAR(255), >> DISCOUNT_CODE CHAR(255), PRIMARY KEY (PROD_CODE))} [code=30000, state=42611] >>> at >> org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:559) >>> at >> org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:455) >>> >> >> >> Any idea why that is? I mean there's a @Size annotation in the entity that >> tell it the max size. Shouldn't the mapper tool take that into account? >> >> Kay >> >>> On Apr 24, 2015, at 10:59 AM, Jody Grassel <[email protected]> wrote: >>> >>> That directive will instruct OpenJPA to introspect the databases to >> ensure >>> the tables needed for the table schema defined by your ORM exists, and >> will >>> create the table structures automatically if they do not exist. Do you >>> have a special need that requires OpenJPA to execute a provided SQL >> script? >>> >>> On Fri, Apr 24, 2015 at 10:54 AM, Kay Wrobel <[email protected]> wrote: >>> >>>> Thanks, Jody. How will that let me provide an SQL script containing >> CREATE >>>> TABLE and INSERT statements? >>>> >>>> Kay >>>> >>>>> On Apr 24, 2015, at 10:51 AM, Jody Grassel <[email protected]> wrote: >>>>> >>>>> Add the following property to your persistence unit: >>>>> >>>>> <property name="openjpa.jdbc.SynchronizeMappings" >>>>> value="buildSchema(ForeignKeys=true)"/> >>>>> >>>>> >>>>> >>>>> On Fri, Apr 24, 2015 at 10:47 AM, Kay Wrobel <[email protected]> >> wrote: >>>>> >>>>>> Hi everybody. >>>>>> >>>>>> I am having a rough time finding a way to initialize an Embedded >>>> In-Memory >>>>>> Derby database in my web application. I found a reference on Oracle's >>>> web >>>>>> site that states you can initialize a database with DDL and DML >>>> statements >>>>>> using properties like the following: >>>>>> >>>>>>> <properties> >>>>>>> <property >>>>>> name="javax.persistence.schema-generation.database.action" >>>>>> value="drop-and-create"/> >>>>>>> <property >>>>>> name="javax.persistence.schema-generation.create-source" >>>> value="script"/> >>>>>>> <property >>>>>> name="javax.persistence.schema-generation.create-script-source" >>>>>> value="META-INF/sql/create.sql" /> >>>>>>> <property name="javax.persistence.sql-load-script-source" >>>>>> value="META-INF/sql/data.sql" /> >>>>>>> </properties> >>>>>> >>>>>> >>>>>> However, that seems to be a new feature in JPA 2.1 spec as part of JEE >>>> 6. >>>>>> I am working with OpenJPA provided by Apache TomEE, which is >>>> openjpa-2.4.0 >>>>>> non-final, a JPA 2.0 implementation I would imagine. The current >>>> release on >>>>>> OpenJPA web site is openjpa 2.3. >>>>>> >>>>>> Is there a way to accomplish this via JPA 2.0 and/or OpenJPA >>>> properties? >>>>>> I am trying to initialize an in-memory database for a test case I try >> to >>>>>> provide to someone. >>>>>> >>>>>> Any help would be much appreciated. >>>>>> >>>>>> Kay Wrobel >>>> >>>> >> >>
