HHH-4771 @ElementCollection fk column should default to entityName_columnNameOfOwningId
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18455 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
1b9394446c
commit
e44b5f197d
|
@ -62,6 +62,11 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
|||
//table name on the mapped by side if any
|
||||
private String mappedByTableName;
|
||||
private String mappedByEntityName;
|
||||
private boolean JPA2ElementCollection;
|
||||
|
||||
public void setJPA2ElementCollection(boolean JPA2ElementCollection) {
|
||||
this.JPA2ElementCollection = JPA2ElementCollection;
|
||||
}
|
||||
|
||||
//FIXME hacky solution to get the information at property ref resolution
|
||||
public String getManyToManyOwnerSideEntityName() {
|
||||
|
@ -398,10 +403,12 @@ public class Ejb3JoinColumn extends Ejb3Column {
|
|||
|
||||
if ( mappedBySide ) {
|
||||
String unquotedMappedbyTable = StringHelper.unquote( mappedByTableName );
|
||||
final String ownerObjectName = JPA2ElementCollection && mappedByEntityName != null ?
|
||||
StringHelper.unqualify( mappedByEntityName ) : unquotedMappedbyTable;
|
||||
columnName = getMappings().getNamingStrategy().foreignKeyColumnName(
|
||||
mappedByPropertyName,
|
||||
mappedByEntityName,
|
||||
unquotedMappedbyTable,
|
||||
ownerObjectName,
|
||||
unquotedLogicalReferenceColumn
|
||||
);
|
||||
//one element was quoted so we quote
|
||||
|
|
|
@ -36,6 +36,7 @@ import javax.persistence.ElementCollection;
|
|||
import javax.persistence.Embeddable;
|
||||
import javax.persistence.FetchType;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.JoinColumns;
|
||||
import javax.persistence.JoinTable;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.MapKey;
|
||||
|
@ -468,6 +469,7 @@ public abstract class CollectionBinder {
|
|||
|
||||
if (isMappedBy
|
||||
&& (property.isAnnotationPresent( JoinColumn.class )
|
||||
|| property.isAnnotationPresent( JoinColumns.class )
|
||||
|| property.isAnnotationPresent( JoinTable.class ) ) ) {
|
||||
String message = "Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn: ";
|
||||
message += StringHelper.qualify( propertyHolder.getPath(), propertyName );
|
||||
|
@ -1415,6 +1417,9 @@ public abstract class CollectionBinder {
|
|||
joinColumns, collValue.getOwner(), collectionEntity, collValue, false, mappings
|
||||
);
|
||||
SimpleValue key = buildCollectionKey( collValue, joinColumns, cascadeDeleteEnabled, property, mappings );
|
||||
if ( property.isAnnotationPresent( ElementCollection.class ) && joinColumns.length > 0 ) {
|
||||
joinColumns[0].setJPA2ElementCollection( true );
|
||||
}
|
||||
TableBinder.bindFk( collValue.getOwner(), collectionEntity, joinColumns, key, false, mappings );
|
||||
}
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@ import javax.persistence.GeneratedValue;
|
|||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.OrderColumn;
|
||||
import javax.persistence.Table;
|
||||
|
||||
import org.hibernate.annotations.CollectionOfElements;
|
||||
import org.hibernate.test.annotations.collectionelement.FavoriteFood;
|
||||
|
@ -31,6 +32,7 @@ import org.hibernate.test.annotations.collectionelement.FavoriteFood;
|
|||
@AttributeOverride( name="scorePerNickName.element", column = @Column(name="fld_score") ),
|
||||
@AttributeOverride( name="favoriteToys.element.brand.surname", column = @Column(name = "fld_surname"))}
|
||||
)
|
||||
@Table(name="tbl_Boys")
|
||||
public class Boy {
|
||||
private Integer id;
|
||||
private String firstName;
|
||||
|
|
|
@ -218,19 +218,23 @@ public class CollectionElementTest extends TestCase {
|
|||
public void testDefaultValueColumnForBasic() throws Exception {
|
||||
isDefaultValueCollectionColumnPresent( Boy.class.getName(), "hatedNames" );
|
||||
isDefaultValueCollectionColumnPresent( Boy.class.getName(), "preferredNames" );
|
||||
isValueCollectionColumnPresent( Boy.class.getName(), "nickNames", "element" );
|
||||
isCollectionColumnPresent( Boy.class.getName(), "nickNames", "element" );
|
||||
isDefaultValueCollectionColumnPresent( Boy.class.getName(), "scorePerPreferredName");
|
||||
}
|
||||
|
||||
public void testDefaultFKNameForElementCollection() throws Exception {
|
||||
isCollectionColumnPresent( Boy.class.getName(), "hatedNames", "Boy_id" );
|
||||
}
|
||||
|
||||
private void isLegacyValueCollectionColumnPresent(String collectionHolder, String propertyName) {
|
||||
|
||||
}
|
||||
|
||||
private void isDefaultValueCollectionColumnPresent(String collectionOwner, String propertyName) {
|
||||
isValueCollectionColumnPresent( collectionOwner, propertyName, propertyName );
|
||||
isCollectionColumnPresent( collectionOwner, propertyName, propertyName );
|
||||
}
|
||||
|
||||
private void isValueCollectionColumnPresent(String collectionOwner, String propertyName, String columnName) {
|
||||
private void isCollectionColumnPresent(String collectionOwner, String propertyName, String columnName) {
|
||||
final Collection collection = getCfg().getCollectionMapping( collectionOwner + "." + propertyName );
|
||||
final Iterator columnIterator = collection.getCollectionTable().getColumnIterator();
|
||||
boolean hasDefault = false;
|
||||
|
|
Loading…
Reference in New Issue