Skip to content

HHH-19495 Remove the default "true" from optimistic-lock in the mapping xsd #10295

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
* @author Steve Ebersole
*/
public interface JaxbLockableAttribute extends JaxbPersistentAttribute {
boolean isOptimisticLock();
Boolean isOptimisticLock();
void setOptimisticLock(Boolean value);
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.hibernate.boot.jaxb.mapping.spi.JaxbAssociationOverrideImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbAttributeOverrideImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbAttributesContainer;
import org.hibernate.boot.jaxb.mapping.spi.JaxbAttributesContainerImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbBaseAttributesContainer;
import org.hibernate.boot.jaxb.mapping.spi.JaxbBasicImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbElementCollectionImpl;
Expand All @@ -22,6 +23,7 @@
import org.hibernate.boot.jaxb.mapping.spi.JaxbPersistentAttribute;
import org.hibernate.boot.jaxb.mapping.spi.JaxbPluralAnyMappingImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbTransientImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbVersionImpl;
import org.hibernate.boot.models.HibernateAnnotations;
import org.hibernate.boot.models.xml.internal.attr.AnyMappingAttributeProcessing;
import org.hibernate.boot.models.xml.internal.attr.BasicAttributeProcessing;
Expand Down Expand Up @@ -151,14 +153,23 @@
}

public static void processAttributes(
JaxbAttributesContainer attributesContainer,
JaxbAttributesContainerImpl attributesContainer,
MutableClassDetails mutableClassDetails,
AccessType classAccessType,
XmlDocumentContext xmlDocumentContext) {
processAttributes( attributesContainer, mutableClassDetails, classAccessType, null, xmlDocumentContext );
}
public static void processAttributes(
JaxbAttributesContainerImpl attributesContainer,
MutableClassDetails mutableClassDetails,
AccessType classAccessType,
MemberAdjuster memberAdjuster,
XmlDocumentContext xmlDocumentContext) {
processAttributes( (JaxbAttributesContainer) attributesContainer, mutableClassDetails, classAccessType, memberAdjuster, xmlDocumentContext );
processVersionAttribute( attributesContainer.getVersion(), mutableClassDetails, classAccessType, xmlDocumentContext );
}

public static void processAttributes(

Check notice

Code scanning / CodeQL

Confusing overloading of methods Note

Method AttributeProcessor.processAttributes(..) could be confused with overloaded method
processAttributes
, since dispatch depends on static types.
JaxbAttributesContainer attributesContainer,
MutableClassDetails mutableClassDetails,
AccessType classAccessType,
Expand Down Expand Up @@ -265,4 +276,17 @@
xmlDocumentContext
);
}

public static void processVersionAttribute(
JaxbVersionImpl version,
MutableClassDetails mutableClassDetails, AccessType classAccessType,
XmlDocumentContext xmlDocumentContext
) {
XmlAnnotationHelper.applyVersion(
version,
mutableClassDetails,
classAccessType,
xmlDocumentContext
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import java.util.UUID;
import java.util.function.Consumer;

import jakarta.persistence.AccessType;
import org.hibernate.AnnotationException;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.NotFoundAction;
Expand Down Expand Up @@ -73,6 +74,7 @@
import org.hibernate.boot.jaxb.mapping.spi.JaxbUniqueConstraintImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbUserTypeImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbUuidGeneratorImpl;
import org.hibernate.boot.jaxb.mapping.spi.JaxbVersionImpl;
import org.hibernate.boot.models.HibernateAnnotations;
import org.hibernate.boot.models.JpaAnnotations;
import org.hibernate.boot.models.XmlAnnotations;
Expand All @@ -81,6 +83,7 @@
import org.hibernate.boot.models.annotations.spi.DatabaseObjectDetails;
import org.hibernate.boot.models.JpaEventListenerStyle;
import org.hibernate.boot.models.spi.JpaEventListener;
import org.hibernate.boot.models.xml.internal.attr.CommonAttributeProcessing;
import org.hibernate.boot.models.xml.internal.db.ForeignKeyProcessing;
import org.hibernate.boot.models.xml.internal.db.JoinColumnProcessing;
import org.hibernate.boot.models.xml.internal.db.TableProcessing;
Expand Down Expand Up @@ -136,6 +139,7 @@
import static org.hibernate.boot.models.JpaAnnotations.UNIQUE_CONSTRAINT;
import static org.hibernate.boot.models.xml.internal.UserTypeCasesMapKey.MAP_KEY_USER_TYPE_CASES;
import static org.hibernate.boot.models.xml.internal.UserTypeCasesStandard.STANDARD_USER_TYPE_CASES;
import static org.hibernate.internal.util.NullnessHelper.coalesce;
import static org.hibernate.internal.util.StringHelper.isEmpty;
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
import static org.hibernate.internal.util.StringHelper.unqualify;
Expand Down Expand Up @@ -1701,4 +1705,32 @@ public static void applyCollectionClassification(
);
collectionClassification.value( classification );
}

public static void applyVersion(JaxbVersionImpl version, MutableClassDetails mutableClassDetails, AccessType classAccessType, XmlDocumentContext xmlDocumentContext) {
if ( version != null ) {
final AccessType accessType = coalesce( version.getAccess(), classAccessType );
final String versionAttributeName = version.getName();

final MutableMemberDetails memberDetails = XmlProcessingHelper.getAttributeMember(
versionAttributeName,
accessType,
mutableClassDetails
);
memberDetails.applyAnnotationUsage(
JpaAnnotations.VERSION,
xmlDocumentContext.getModelBuildingContext()
);
CommonAttributeProcessing.applyAccess( accessType, memberDetails, xmlDocumentContext );
CommonAttributeProcessing.applyAttributeAccessor( version, memberDetails, xmlDocumentContext );
XmlAnnotationHelper.applyTemporal( version.getTemporal(), memberDetails, xmlDocumentContext );
if ( version.getColumn() != null ) {
final ColumnJpaAnnotation columnAnn = (ColumnJpaAnnotation) memberDetails.applyAnnotationUsage(
JpaAnnotations.COLUMN,
xmlDocumentContext.getModelBuildingContext()
);
columnAnn.apply( version.getColumn(), xmlDocumentContext );
XmlAnnotationHelper.applyColumnTransformation( version.getColumn(), memberDetails, xmlDocumentContext );
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,15 @@ public static void applyOptimisticLock(
JaxbLockableAttribute jaxbAttribute,
MutableMemberDetails memberDetails,
XmlDocumentContext xmlDocumentContext) {
final boolean includeInOptimisticLock = jaxbAttribute.isOptimisticLock();
final OptimisticLockAnnotation optLockAnn = (OptimisticLockAnnotation) memberDetails.applyAnnotationUsage(
HibernateAnnotations.OPTIMISTIC_LOCK,
xmlDocumentContext.getModelBuildingContext()
);
optLockAnn.excluded( !includeInOptimisticLock );
final Boolean includeInOptimisticLock = jaxbAttribute.isOptimisticLock();

if ( includeInOptimisticLock != null ) {
final OptimisticLockAnnotation optLockAnn = (OptimisticLockAnnotation) memberDetails.applyAnnotationUsage(
HibernateAnnotations.OPTIMISTIC_LOCK,
xmlDocumentContext.getModelBuildingContext()
);
optLockAnn.excluded( !includeInOptimisticLock );
}
}

public static void applyFetching(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@
<xsd:attribute name="access" type="orm:access-type"/>
<!-- hbm: Hibernate's pluggable accessor spi -->
<xsd:attribute name="attribute-accessor" type="xsd:string" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
</xsd:complexType>

<xsd:group name="basic-type-group">
Expand Down Expand Up @@ -1027,7 +1027,7 @@
<xsd:attribute name="fetch-mode" type="orm:plural-fetch-mode"/>
<xsd:attribute name="access" type="orm:access-type"/>
<xsd:attribute name="attribute-accessor" type="xsd:string" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
<xsd:attribute name="classification" type="orm:limited-collection-classification-enum" />
</xsd:complexType>

Expand Down Expand Up @@ -1109,7 +1109,7 @@
<xsd:attribute name="name" type="xsd:string" use="required"/>
<xsd:attribute name="access" type="orm:access-type"/>
<xsd:attribute name="attribute-accessor" type="xsd:string" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
</xsd:complexType>

<!-- **************************************************** -->
Expand Down Expand Up @@ -1614,7 +1614,7 @@
<xsd:attribute name="orphan-removal" type="xsd:boolean"/>
<xsd:attribute name="classification" type="orm:limited-collection-classification-enum" />
<xsd:attribute name="not-found" type="orm:not-found-enum"/>
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
</xsd:complexType>

<!-- **************************************************** -->
Expand Down Expand Up @@ -1661,7 +1661,7 @@
<xsd:attribute name="optional" type="xsd:boolean"/>
<xsd:attribute name="access" type="orm:access-type"/>
<xsd:attribute name="attribute-accessor" type="xsd:string" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
<xsd:attribute name="maps-id" type="xsd:string"/>
<xsd:attribute name="id" type="xsd:boolean"/>
<xsd:attribute name="not-found" type="orm:not-found-enum"/>
Expand Down Expand Up @@ -2057,7 +2057,7 @@
<xsd:attribute name="orphan-removal" type="xsd:boolean"/>
<xsd:attribute name="classification" type="orm:limited-collection-classification-enum" />
<xsd:attribute name="not-found" type="orm:not-found-enum"/>
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
</xsd:complexType>

<!-- **************************************************** -->
Expand Down Expand Up @@ -2113,7 +2113,7 @@
<xsd:attribute name="optional" type="xsd:boolean"/>
<xsd:attribute name="access" type="orm:access-type"/>
<xsd:attribute name="attribute-accessor" type="xsd:string" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
<xsd:attribute name="mapped-by" type="xsd:string"/>
<xsd:attribute name="orphan-removal" type="xsd:boolean"/>
<xsd:attribute name="maps-id" type="xsd:string"/>
Expand Down Expand Up @@ -3139,7 +3139,7 @@
<xsd:attribute name="fetch" type="orm:fetch-type"/>
<xsd:attribute name="fetch-mode" type="orm:singular-fetch-mode"/>
<xsd:attribute name="optional" type="xsd:boolean"/>
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
</xsd:complexType>

<xsd:complexType name="any-discriminator">
Expand Down Expand Up @@ -3208,7 +3208,7 @@
<xsd:attribute name="fetch-mode" type="orm:plural-fetch-mode"/>
<xsd:attribute name="access" type="orm:access-type"/>
<xsd:attribute name="attribute-accessor" type="xsd:string" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" default="true" />
<xsd:attribute name="optimistic-lock" type="xsd:boolean" />
<xsd:attribute name="classification" type="orm:limited-collection-classification-enum" />
</xsd:complexType>

Expand Down Expand Up @@ -3532,4 +3532,4 @@
<xsd:attribute name="type" use="required" type="xsd:string"/>
</xsd:complexType>

</xsd:schema>
</xsd:schema>
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.orm.test.jpa.xml;



public class BaseShop {

private int id;

private int version;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public int getVersion() {
return version;
}

public void setVersion(int version) {
this.version = version;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.orm.test.jpa.xml;

import jakarta.persistence.Id;
import jakarta.persistence.Version;

import java.util.List;

public class Consumer {

@Id
private int id;

private List<ConsumerItem> consumerItems;

@Version
private int version;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public List<ConsumerItem> getConsumerItems() {
return consumerItems;
}

public void setConsumerItems(List<ConsumerItem> consumerItems) {
this.consumerItems = consumerItems;
}

public int getVersion() {
return version;
}

public void setVersion(int version) {
this.version = version;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/*
* SPDX-License-Identifier: Apache-2.0
* Copyright Red Hat Inc. and Hibernate Authors
*/
package org.hibernate.orm.test.jpa.xml;

import jakarta.persistence.Version;

public class ConsumerItem {

private int id;

private Consumer consumer;

@Version
private int version;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public Consumer getConsumer() {
return consumer;
}

public void setConsumer(Consumer consumer) {
this.consumer = consumer;
}

public int getVersion() {
return version;
}

public void setVersion(int version) {
this.version = version;
}
}
Loading