[
https://issues.apache.org/jira/browse/OPENJPA-2054?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13118180#comment-13118180
]
Michael Spiro commented on OPENJPA-2054:
----------------------------------------
Possible explanation:
The bug is in the class
org.apache.openjpa.persistence.jdbc.AnnotationPersistenceMappingParser in the
line 1717 (OpenJPA version 2.1.0):
/**
* Create a new schema column with information from the given annotation.
*/
private Column newColumn(JoinColumn join) {
Column col = new Column();
if (!StringUtils.isEmpty(join.name()))
col.setIdentifier(DBIdentifier.newColumn(join.name(), delimit()));
if (!StringUtils.isEmpty(join.columnDefinition()))
col.setTypeIdentifier(DBIdentifier.newColumnDefinition(join.columnDefinition()));
if (!StringUtils.isEmpty(join.referencedColumnName()))
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(),
delimit()));
col.setNotNull(!join.nullable());
col.setFlag(Column.FLAG_UNINSERTABLE, !join.insertable());
col.setFlag(Column.FLAG_UNUPDATABLE, !join.updatable());
return col;
}
If the attribute referencedColumnName is not empty it’s just assumed without
any check to be a column reference and is not supposed to be a constant. The
DBIdentifier for this element is then created with the type COLUMN. If this
would be CONSTANT, then the method DBIdentifier.setName(String name, boolean
delimit) wouldn’t add delimiters and everything would be probably correct. But
it’s considered to be a COLUMN. The solution would be to add the check for a
constant value before this line:
col.setTargetIdentifier(DBIdentifier.newColumn(join.referencedColumnName(),
delimit()));
> Constant join fails
> -------------------
>
> Key: OPENJPA-2054
> URL: https://issues.apache.org/jira/browse/OPENJPA-2054
> Project: OpenJPA
> Issue Type: Bug
> Affects Versions: 2.1.0
> Reporter: Michael Spiro
> Labels: Constant, join
>
> According to the documentation (Part 3, chapter 7, paragraph 6), join
> criteria can be defined so that a column in the source or target table must
> have some constant value. The constant value should be specified in the
> attribute "referencedColumnName" of the @JoinColumn annotation. If the
> constant is a string then its value should be enclosed first in single quotes
> and then in double quotes like this:
> @JoinColumn(name="table.column", referencedColumnName="'value'")
> A numeric constant value needs just a single pair of double quotes:
> @JoinColumn(name="table.column", referencedColumnName="2")
> However a practical test shows that both options produce an error.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira