# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.  

parse-gen: Parsing table generator "{0}".
dup-gen: Found duplicate generator "{0}" in "{1}".  Ignoring.
override-gen: Found duplicate generator "{0}" in "{1}".  Overriding previous \
	definition.
no-gen-name: The table generator in "{0}" must declare a name.
parse-sqlrsmapping: Parsing result set mapping "{0}".
dup-sqlrsmapping: Found duplicate result set mapping "{0}" in "{1}".  Ignoring.
override-sqlrsmapping: Found duplicate result set mapping "{0}" in "{1}". \
	Overriding previous definition.
unsupported: OpenJPA does not yet support "{1}" as used in "{0}".
second-name: Type "{0}" declares an unnamed @SecondaryTable.
second-inconsist: "{0}" declares inconsistent secondary tables on its join \
	columns.
bad-second: "{0}" declares a secondary table on columns that do not support \
	this attribute.
unique-constraints: Detected declared unique constraints on "{0}".  OpenJPA \
	does not yet support the @UniqueConstraint annotation.
inconsist-col-attrs: Detected inconsistent values of "unique" on different \
	columns of "{0}".  OpenJPA does not yet support different per-column \
    unique values.  All columns for this mapping must use the same values.
pk-as-fk: The "usePKasFK" attribute is not yet supported.  Mapping your \
	OneToOne using JoinColumns that match your id property columns will work.
no-override-name: Missing "name" property on mapping override for "{0}".
embed-override-name: Embedded property "{0}" declares a mapping override for \
	"{1}", but that is not a persistent property in the embedded type.
num-cols-mismatch: Expected "{0}" to have "{1}" column(s), but you specified \
	"{2}" column(s).
second-version: Version property "{0}" cannot map to a secondary table column. \
	Version columns must always be in the primary table of the class.
not-embedded: Attempt to declare mapping overrides on non-embedded field "{0}".
no-gen-table: No generated table found at "{0}".
unique-no-column: A unique constraint specified in mapping of "{0}" specified \
    no column.
unique-empty-column: A unique constraint "{0}" specified in mapping of class  \
    "{1}" includes an empty column.
unique-many-on-seq-unsupported: More than one unique constraints is specified \
	on sequence generator "{1}" in "{0}". But multiple unique constraint on \
	sequence generator is currently not supported.    
discriminator-on-abstract-class: A discriminator value has been specified for \
	the abstract class "{0}". The discriminator will never be used and may be \
	safely removed.
    