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

Reply via email to