Bug 1003468 - HHH-8464 Using JPA2 specific quoting character (double quote) for JoinColumn results in DuplicateMappingException.
Summary: HHH-8464 Using JPA2 specific quoting character (double quote) for JoinColumn ...
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss Enterprise Application Platform 6
Classification: JBoss
Component: Hibernate
Version: 6.1.0
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ER4
: EAP 6.2.0
Assignee: Brett Meyer
QA Contact: Zbyněk Roubalík
Russell Dickenson
URL:
Whiteboard:
Depends On:
Blocks: 1010467
TreeView+ depends on / blocked
 
Reported: 2013-09-02 06:49 UTC by dstephan
Modified: 2018-12-03 19:49 UTC (History)
6 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2013-12-15 16:14:23 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)

Description dstephan 2013-09-02 06:49:09 UTC
A JoinColumn like the following:

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="\"NAME#\"", insertable=false, updatable=false)
private OutTx transaction;

will result in:

org.hibernate.DuplicateMappingException: Table [XYZ contains phyical column name `NAME#` represented by different logical column names: `NAME#`, "NAME#"

It seems like these lines in EJB3JoinColumn.addColumnBinding() won't replace the mapping with backticks:

if ( StringHelper.isQuoted( getLogicalColumnName() ) || StringHelper.isQuoted( getLogicalColumnName() ) )
{ logicalColumnName = StringHelper.quote( logicalColumnName ); }

Comment 1 dstephan 2013-09-02 06:51:06 UTC
Hibernate Jira : https://hibernate.atlassian.net/browse/HHH-8464

Comment 2 Brett Meyer 2013-09-03 16:49:11 UTC
As described on HHH-8464:

Dave, the mapping looks off (I think).  In the test case, OutboundDistributorEligibility has the following:

    @Id
    @Column(name = "\"WETRN#\"", precision = 9, scale = 0)
    private BigInteger transactionNumber;

    ...

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="\"WETRN#\"", insertable=false, updatable=false)
    private OutboundNewDistributorTransaction transaction;

That would try to create 2 physical columns with the "WETRN#" name.  It looks to me like they're trying to define a derived primary key from the many-to-one OutboundNewDistributorTransaction foreign key (ie, the OutboundDistributorEligibility PK is the same as its FK referring to to OutboundNewDistributorTransaction).  Instead, try this:

Completely remove OutboundDistributorEligibility#transactionNumber.  Add @Id to OutboundDistributorEligibility#transaction.  OutboundDistributorEligibility.OutboundDistributorEligibilityPK will also need updated to refer to "transaction" instead of "transactionNumber".

Please give that a shot first.  I'll leave this open for now.

Comment 3 Brett Meyer 2013-09-05 18:30:57 UTC
Dave, regardless of the mapping, there was a legitimate issue.  Corrected upstream in HHH-8464.  Do they need a one-off, or is this purely the permanent fix?  If one-off, create an additional BZ?

Comment 4 Brett Meyer 2013-09-18 14:05:56 UTC
Assuming this is the permanent fix (EAP 6.3.0).  Dave, open a one-off if needed.

Comment 5 Brett Meyer 2013-09-20 02:28:56 UTC
Dave stated a one-off wasn't needed -- easy workarounds are acceptable.

Comment 8 Brett Meyer 2013-09-25 15:54:33 UTC
Actually, this will go into EAP 6.2.0 ER4's upgrade to Hibernate ORM 4.2.6.Final in 1010467.

Comment 12 Martin Simka 2013-11-20 09:17:41 UTC
verified on EAP 6.2.0.CR2


Note You need to log in before you can comment on or make changes to this bug.