@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