[Hibernate-JIRA] Created: (HHH-3179) Incorrect SQL using formula in component or as key with optimistic-lock="dirty"
by Heinz Huber (JIRA)
Incorrect SQL using formula in component or as key with optimistic-lock="dirty"
-------------------------------------------------------------------------------
Key: HHH-3179
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3179
Project: Hibernate3
Issue Type: Bug
Affects Versions: 3.2.6
Environment: Hibernate 3.2.6ga
Oracle 10i (should not matter)
Reporter: Heinz Huber
Attachments: association-formula.zip
Don't generate null as column name for formulas on dirty optimisic locking.
Effect: If a component (or an association) used for the generation of the where clause for optimistic locking by dirty properties contained a formula, null would have been inserted as column name. Now these values are skipped.
Example:
<class name="Verfueger" table="ELVFGR" dynamic-insert="true" dynamic-update="true" select-before-update="true" optimistic-lock="dirty"
rowid="rowid">
<composite-id name="nummer">
<key-many-to-one name="mandant" column="vfMand" />
<key-property name="anlagekennzeichen" column="vfAkzV" />
<key-property name="nummer" column="vfVfNr" length="6" />
</composite-id>
<many-to-one name="kunde" cascade="evict" fetch="select" not-null="true" lazy="false" not-found="keep">
<formula>vfMand</formula>
<column name="vfAkzD" />
<column name="vfKdNr" />
</many-to-one>
</class>
If property kunde was changed and the entity is being updated, the where clause would have been:
vfMand = ? and vfAkzV = ? and vfVfNr = ? and null = ? and vfAkzD = ? and vfKdNr = ?
Clearly, the null is wrong!
Extent:
src/org/hibernate/persister/entity/AbstractEntityPersister.java
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (HHH-3181) Legacy databases: Advanced handling of missing foreign key values
by Heinz Huber (JIRA)
Legacy databases: Advanced handling of missing foreign key values
-----------------------------------------------------------------
Key: HHH-3181
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3181
Project: Hibernate3
Issue Type: New Feature
Affects Versions: 3.2.6
Environment: Hibernate 3.2.6
Oracle 10i (irrelevant)
Reporter: Heinz Huber
Attachments: not-found-keep.zip
"keep" as valid value for attribute not-found of many-to-one/many.
Effect: If the referenced object can't be found, a dummy object with the given key is constructed.
Example: Account.currency contains the value XYZ. This currency can't be found in the corresponding code table. After loading the account contains a currency object XYZ nontheless.
Extent:
src/org/hibernate/hibernate-mapping-3.0.dtd
src/org/hibernate/cfg/HbmBinder.java
src/org/hibernate/engine/ForeignKeys.java
src/org/hibernate/mapping/ManyToOne.java
src/org/hibernate/mapping/OneToMany.java
src/org/hibernate/type/EntityType.java
src/org/hibernate/type/ManyToOneType.java
src/org/hibernate/type/OneToOneType.java
src/org/hibernate/type/TypeFactory.java
There are some TODOs left:
- The handling of proxies should be improved.
- Currently works only per target entity (see comment in test).
But it works for
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (HHH-3189) Update c3p0 to 0.9.1.2
by Jean-Philippe Bouchard (JIRA)
Update c3p0 to 0.9.1.2
----------------------
Key: HHH-3189
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3189
Project: Hibernate3
Issue Type: Task
Components: core
Affects Versions: 3.2.5
Environment: Tomcat 5.5, Hibernate 3.2.5, MySQL 4.1.11a-4sarge, c3p0 0.9.1
Reporter: Jean-Philippe Bouchard
Priority: Minor
Attachments: borked.txt
I run a pretty busy site and every 24 hours or so, the system completely locks up and I have to restart tomcat. I investigated and the problem occurs in c3p0 which I use for my connection pooling. I attached a file containing the stack traces (obtained with JConsole) of some of the http processor threads when the system locks up. Using JConsole, I also tried to run softResetAllUsers() on the pooled datasource when the system is locked up and that fixes the issue as well.
In the change log for c3p0 0.9.1.2, they mention a fix of a deadlock issue so I tried the new version and the problem doesn't occur anymore.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (ANN-551) @SQLInsert. Columns in sql comes in different order depending on the application server used
by Søren Pedersen (JIRA)
@SQLInsert. Columns in sql comes in different order depending on the application server used
--------------------------------------------------------------------------------------------
Key: ANN-551
URL: http://opensource.atlassian.com/projects/hibernate/browse/ANN-551
Project: Hibernate Annotations
Type: Bug
Components: binder
Versions: 3.2.1
Environment: Hibernate-core 3.2.2, hibernate-annotations 3.2.1. WebLogic 9.2 and JBoss 4.0.5. Oracle 10.
Reporter: Søren Pedersen
Problem:
The columns in the sql you specify in SQLInsert annotation has be ordered in the same way hibernate sorts its properties when constructing the insert sql.
Example:
When WebLogic 9.2 is used the sql should look like this:
"insert into acount (name, address, country) values (?,?,?)"
But when JBoss 4.0.5 is used the sql should look like this:
"insert into acount (address, country, name) values (?,?,?)"
The above are only examples.
Consequence:
I have to have different SQLInsert's for every JEE apllication server we support, because the properties comes in different order depending on the application server used.
Suggested solution:
In the method org.hibernate.cfg.AnnotationBinder.addElementsOfAClass(List<PropertyData> elements, PropertyHolder propertyHolder, boolean isPropertyAnnotated,String propertyAccessor, final XClass annotatedClass, ExtendedMappings mappings)
This property list shown below should be sorted to make sure that the properties also come in the same order:
List<XProperty> properties = annotatedClass.getDeclaredProperties( accessType );
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (HHH-3186) session.createQuery method stripping braces when or condition is present
by Jerry Pothen (JIRA)
session.createQuery method stripping braces when or condition is present
------------------------------------------------------------------------
Key: HHH-3186
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3186
Project: Hibernate3
Issue Type: Bug
Components: query-hql
Affects Versions: 3.2.6, 3.2.5
Environment: RAD 6.0.1.4, Hibernate 3.2.5, DB UDB 9
Reporter: Jerry Pothen
Attachments: Hibernate_Issue_2008_03_16.txt
Please note the removal of the braces separating the OR condition. I don't know if I'm doing something stupid. Any help would be greatly appreciated.
The HQL passed to the create query method is:
from QueueCustomerView where (formStatusId in (102, 103, 104, 105)) and (accountOfficer in ('U001927', 'C001739', 'U002083', 'U002209', 'C002366', 'U001878', 'U001928', 'C002076', 'U841390', 'C002355', 'C001861', 'U002195', 'C002345', 'C001762', 'C001767', 'C002364', 'C002346')) and ((responsibleBranchId = 108 and businessLineId = 100) or (responsibleBranchId = 130 and businessLineId = 104) or (responsibleBranchId = 127 and businessLineId = 112) or (responsibleBranchId = 122 and businessLineId = 112)) order by customerStatusId desc , reassessmentDate asc
The SQL query hibernate outputs to the console is:
select queuecusto0_.field1,..., queuecusto0_.field2 from kycr.vw_customer_queue queuecusto0_ where (queuecusto0_.STATUS_ID in (102 , 103 , 104 , 105)) and (queuecusto0_.ACCT_OFF_ID in ('U001927' , 'C001739' , 'U002083' , 'U002209' , 'C002366' , 'U001878' , 'U001928' , 'C002076' , 'U841390' , 'C002355' , 'C001861' , 'U002195' , 'C002345' , 'C001762' , 'C001767' , 'C002364' , 'C002346')) and (queuecusto0_.BK_BRNCH=108 and queuecusto0_.BUSNSS_LINE=100 or queuecusto0_.BK_BRNCH=130 and queuecusto0_.BUSNSS_LINE=104 or queuecusto0_.BK_BRNCH=127 and queuecusto0_.BUSNSS_LINE=112 or queuecusto0_.BK_BRNCH=122 and queuecusto0_.BUSNSS_LINE=112) order by queuecusto0_.CUST_IS_NEW desc, queuecusto0_.REASS_DT asc
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (HHH-3063) Class with @IdClass gets lazy-loaded when "id" field accessed
by Carl Allain (JIRA)
Class with @IdClass gets lazy-loaded when "id" field accessed
-------------------------------------------------------------
Key: HHH-3063
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3063
Project: Hibernate3
Issue Type: Bug
Components: core
Affects Versions: 3.2.2
Environment: Windows, Postgres
Reporter: Carl Allain
Priority: Minor
When I access the getter named getCountryIsoCode() of the following class (owning a CGLIB proxy that HB gave me), there is some lazy-loading activity that occurs. Of course, the field countryIsoCode is not tagged with @Id, but this is because of the @IdClass annotation, but I would expect the same "will-no-lazy-load-when-only-id-fields-are-accessed" regular behavior.
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.AttributeOverride;
import org.hibernate.annotations.CollectionOfElements;
import javax.persistence.JoinColumn;
import javax.persistence.Column;
import javax.persistence.AttributeOverrides;
import java.io.Serializable;
import java.util.List;
import javax.persistence.ManyToOne;
import com.magrit.bdom.types.multilingual.I18nDescriptionPdo;
import org.hibernate.annotations.FetchMode;
import com.dom.systemconfiguration.entity.SpokenLanguagePdo;
import javax.persistence.Version;
import org.hibernate.annotations.Fetch;
import javax.persistence.Table;
import javax.persistence.Id;
import com.dom.geography.entity.CountrySubdivisionPdo.PrimaryKey;
import javax.persistence.JoinTable;
import javax.persistence.Embedded;
import javax.persistence.OneToMany;
import javax.persistence.IdClass;
import javax.persistence.JoinColumns;
import org.hibernate.annotations.Filter;
import java.util.ArrayList;
import org.hibernate.annotations.BatchSize;
@Entity
@Table(name="PLGE_CTRSD")
@IdClass(com.dom.geography.entity.CountrySubdivisionPdo.PrimaryKey.class)
@BatchSize(size=20)
public class CountrySubdivisionPdo implements Serializable {
public static class PrimaryKey implements Serializable {
// COLUMN: CTRSD_CD
/**
* The "ISO Code" value.
*/
private String code;
// COLUMN: CTR_ISO_CD
/**
* The "Country" value.
*/
private String countryIsoCode;
// COLUMN: CTRSD_CD
/**
* Gets the "ISO Code" value.
*/
@Column(name="CTRSD_CD", nullable=false)
public String getCode() {
return this.code;
}
// COLUMN: CTRSD_CD
/**
* Sets the "ISO Code" value.
*/
public void setCode(String code) {
this.code = code;
}
// COLUMN: CTR_ISO_CD
/**
* Gets the "Country" value.
*/
@Column(name="CTR_ISO_CD", nullable=false)
public String getCountryIsoCode() {
return this.countryIsoCode;
}
// COLUMN: CTR_ISO_CD
/**
* Sets the "Country" value.
*/
public void setCountryIsoCode(String countryIsoCode) {
this.countryIsoCode = countryIsoCode;
}
public boolean equals(Object o) {
if (o instanceof PrimaryKey) {
PrimaryKey other = (PrimaryKey) o;
return (
true // This is just because of the generation algorithm
&&
(
(this.getCode() == null && other.getCode() == null) ||
(this.getCode() != null && other.getCode() != null &&
this.getCode().equals(other.getCode()))
)
&&
(
(this.getCountryIsoCode() == null && other.getCountryIsoCode() == null) ||
(this.getCountryIsoCode() != null && other.getCountryIsoCode() != null &&
this.getCountryIsoCode().equals(other.getCountryIsoCode()))
)
);
}
return false;
}
}
// FK: PLGE_CTRSDLNG_FK_PLGE_CTRSD (TO)
private List<SpokenLanguagePdo> spokenLanguages;
// FK: PLGE_CTRSDTMZ_FK_PLGE_CTRSD (TO)
private List<TimezonePdo> timezones;
// FK: PLGE_CTRSD_FK_PLGE_CTR (FROM) / COLUMN(S): CTR_ISO_CD
private CountryPdo country;
// COLUMN: CTRSD_CD
/**
* The "ISO Code" value.
*/
private String code;
// COLUMN: CTR_ISO_CD
/**
* The "Country" value.
*/
private String countryIsoCode;
// MultilingualDescription BOJ
private List<I18nDescriptionPdo> descriptions;
// TS COLUMN: CTRSD_TS
private Integer revisionNumber;
// FK: PLGE_CTRSDLNG_FK_PLGE_CTRSD (TO)
@OneToMany(targetEntity=SpokenLanguagePdo.class)
@JoinTable(name="PLGE_CTRSDLNG",
joinColumns={ @JoinColumn(name = "CTR_ISO_CD", referencedColumnName = "CTR_ISO_CD"), @JoinColumn(name = "CTRSD_CD", referencedColumnName = "CTRSD_CD") },
inverseJoinColumns={ @JoinColumn(name = "SPLNG_ISO_CD", referencedColumnName = "SPLNG_ISO_CD") }
)
@Fetch(FetchMode.SUBSELECT)
public List<SpokenLanguagePdo> getSpokenLanguages() {
return this.spokenLanguages;
}
// FK: PLGE_CTRSDLNG_FK_PLGE_CTRSD (TO)
public void setSpokenLanguages(List<SpokenLanguagePdo> spokenLanguages) {
this.spokenLanguages = spokenLanguages;
}
// FK: PLGE_CTRSDLNG_FK_PLGE_CTRSD (TO)
/**
* Convenience method. This method is not thread safe.
*/
public void addSpokenLanguage(SpokenLanguagePdo spokenLanguagePdo) {
if (this.spokenLanguages == null) {
this.spokenLanguages = new ArrayList<com.dom.systemconfiguration.entity.SpokenLanguagePdo>();
}
this.spokenLanguages.add(spokenLanguagePdo);
}
// FK: PLGE_CTRSDTMZ_FK_PLGE_CTRSD (TO)
@OneToMany(targetEntity=TimezonePdo.class)
@JoinTable(name="PLGE_CTRSDTMZ",
joinColumns={ @JoinColumn(name = "CTR_ISO_CD", referencedColumnName = "CTR_ISO_CD"), @JoinColumn(name = "CTRSD_CD", referencedColumnName = "CTRSD_CD") },
inverseJoinColumns={ @JoinColumn(name = "TMZ_UID", referencedColumnName = "TMZ_UID") }
)
@Fetch(FetchMode.SUBSELECT)
public List<TimezonePdo> getTimezones() {
return this.timezones;
}
// FK: PLGE_CTRSDTMZ_FK_PLGE_CTRSD (TO)
public void setTimezones(List<TimezonePdo> timezones) {
this.timezones = timezones;
}
// FK: PLGE_CTRSDTMZ_FK_PLGE_CTRSD (TO)
/**
* Convenience method. This method is not thread safe.
*/
public void addTimezone(TimezonePdo timezonePdo) {
if (this.timezones == null) {
this.timezones = new ArrayList<com.dom.geography.entity.TimezonePdo>();
}
this.timezones.add(timezonePdo);
}
// FK: PLGE_CTRSD_FK_PLGE_CTR (FROM) / COLUMN(S): CTR_ISO_CD
@ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumns({
@JoinColumn(name="CTR_ISO_CD", referencedColumnName="CTR_ISO_CD")
})
public CountryPdo getCountry() {
return this.country;
}
// FK: PLGE_CTRSD_FK_PLGE_CTR (FROM) / COLUMN(S): CTR_ISO_CD
public void setCountry(CountryPdo country) {
this.country = country;
}
// COLUMN: CTRSD_CD
/**
* Gets the "ISO Code" value.
*/
// columnDo.getDomain(): {<class:Domain>;id=ALPHANUMERICUPPER$;sqlDataTypeName=VARCHAR;desc=Alphabetic/Numeric - upper ([A9]*);length=null;scale=-1;typeDef=0}
@Id
public String getCode() {
return this.code;
}
// COLUMN: CTRSD_CD
/**
* Sets the "ISO Code" value.
*/
public void setCode(String code) {
this.code = code;
}
// COLUMN: CTR_ISO_CD
/**
* Gets the "Country" value.
*/
// columnDo.getDomain(): {<class:Domain>;id=ALPHABETICUPPER$;sqlDataTypeName=VARCHAR;desc=Alphabetic - upper ([A]*);length=null;scale=-1;typeDef=0}
@Id
public String getCountryIsoCode() {
return this.countryIsoCode;
}
// COLUMN: CTR_ISO_CD
/**
* Sets the "Country" value.
*/
public void setCountryIsoCode(String countryIsoCode) {
this.countryIsoCode = countryIsoCode;
}
// MultilingualDescription BOJ
@CollectionOfElements
@JoinTable(
name="PLGE_CTRSD1",
joinColumns= {
@JoinColumn(name="CTRSD_CD", referencedColumnName="CTRSD_CD"),
@JoinColumn(name="CTR_ISO_CD", referencedColumnName="CTR_ISO_CD")
}
)
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "element.languageCode", column=@Column(name="LNG_CD")),
@AttributeOverride(name = "element.description", column=@Column(name="CTRSD_DES")),
@AttributeOverride(name = "element.descriptionKey", column=@Column(name="CTRSD_DES_CLE"))
})
@Filter(name="GLOBAL_unilingualDescription", condition="LNG_CD = :languageCode")
@Fetch(FetchMode.SUBSELECT)
public List<I18nDescriptionPdo> getDescriptions() {
return this.descriptions;
}
// MultilingualDescription BOJ
public void setDescriptions(List<I18nDescriptionPdo> descriptions) {
this.descriptions = descriptions;
}
// MultilingualDescription BOJ
/**
* Convenience method. This method is not thread safe.
*/
public void addDescription(I18nDescriptionPdo i18nDescriptionPdo) {
if (this.descriptions == null) {
this.descriptions = new ArrayList<com.magrit.bdom.types.multilingual.I18nDescriptionPdo>();
}
this.descriptions.add(i18nDescriptionPdo);
}
// TS COLUMN: CTRSD_TS
@Version
@Column(name="CTRSD_TS", nullable=false)
public Integer getRevisionNumber() {
return this.revisionNumber;
}
// TS COLUMN: CTRSD_TS
public void setRevisionNumber(Integer revisionNumber) {
this.revisionNumber = revisionNumber;
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (HBX-1054) "No type name" MappingException message is far too cryptic
by Darryl Miles (JIRA)
"No type name" MappingException message is far too cryptic
----------------------------------------------------------
Key: HBX-1054
URL: http://opensource.atlassian.com/projects/hibernate/browse/HBX-1054
Project: Hibernate Tools
Issue Type: Improvement
Components: hbmlint
Affects Versions: 3.2.1
Reporter: Darryl Miles
Priority: Minor
Having to resort to stepping into Hibernate code to find where this exception is making hard work for developers. Basically the problem is that the message does not inform the developer exactly which class and which column has the problem (so we need some context information emitted with the "No type name"). The rest of the method does have code to generate a useful exception message if(result==null){}
http://fisheye.labs.jboss.com/browse/Hibernate/core/tags/hibernate-3.3.0....
public Type getType() throws MappingException {
if (typeName==null) {
throw new MappingException("No type name");
}
Type result = TypeFactory.heuristicType(typeName, typeParameters);
if (result==null) {
String msg = "Could not determine type for: " + typeName;
if(table != null){
msg += ", at table: " + table.getName();
}
if(columns!=null && columns.size()>0) {
msg += ", for columns: " + columns;
}
throw new MappingException(msg);
}
return result;
}
Example mapping that cause the problem:
<class name="domain.MyData" table="my_data">
<id name="myDataId" type="long" column="my_data_id">
<generator class="native" />
</id>
<list name="abcList" table="my_data_list" cascade="all-delete-orphan">
<key column="my_data_id"/>
<index column="sort_order"/>
<element column="value" not-null="true" /> <!-- type="" was missing here! -->
</list>
</class>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years
[Hibernate-JIRA] Created: (HHH-3211) The method org.hibernate.tuple.ElementWrapper.equals(Object) is implemented incorrectly
by Sergey (JIRA)
The method org.hibernate.tuple.ElementWrapper.equals(Object) is implemented incorrectly
---------------------------------------------------------------------------------------
Key: HHH-3211
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-3211
Project: Hibernate3
Issue Type: Bug
Components: core
Environment: Hibernate 3.2.5, MySQL 5.0 (version/database does not matter for this bug)
Reporter: Sergey
1. Suppose, we have the following mapping (DOM4J entity mode):
<hibernate-mapping>
<class entity-name="Parent" node="Parent">
<id name="id_" type="long">
<generator class="native"/>
</id>
<list name="children">
<key column="parentid_"/>
<list-index column="LIST_INDEX"/>
<one-to-many class="Child"/>
</list>
</class>
<class entity-name="Child" node="Child">
<id name="id_" type="long">
<generator class="native"/>
</id>
<property name="name" type="string"/>
</class>
</hibernate-mapping>
2. Suppose, we have an instance of "Parent" with more than one "Child" in "children" list.
Hibernate makes correct changes into database, but does not remove "Child" elements from "Parent" when the following code executed:
Element parent = ....;
Element children = parent.element("children");
List childrenList = children.elements("Child");
for (int i = 0, k = childrenList.size(); i < k; i++) {
Element child = (Element)childrenList.get(i);
children.remove(child); // here child element should be removed from children element but can not be removed
session.delete(child);
}
session.update(parent);
This bug is reproduced only for two or more number of entities in hibernate collection (because of org.dom4j.tree.DefaultElement implementation peculiarity). This situation occurs because the method ElementWrapper.equals(Object) returns FALSE when compares an instance of ElementWrapper with itself. As a result, it is impossible to remove an instance of ElementWrapper from any Collection/List.
Here is a simplified but full example of the bug:
DefaultElement child1 = new DefaultElement("child", null);
child1.setText("child 1");
DefaultElement child2 = new DefaultElement("child", null);
child2.setText("child 2");
ElementWrapper child1Wrapper = new ElementWrapper(child1);
ElementWrapper child2Wrapper = new ElementWrapper(child2);
DefaultElement parent = new DefaultElement("parent");
parent.add(child1Wrapper);
parent.add(child2Wrapper);
parent.remove(child1Wrapper);
parent.remove(child2Wrapper);
Iterator childs = parent.elementIterator();
while(childs.hasNext()) {
Element ch = (Element)childs.next();
System.out.println(ch.getText());
}
To fix this bug, ElementWrapper should implement equals(Object) method in the way like the following:
public boolean equals(Object other) {
if (this == other)
return true;
if (other instanceof ElementWrapper) {
ElementWrapper otherWraper = (ElementWrapper)other;
Element otherElement = otherWraper.getElement();
return element.equals(otherElement);
}
return element.equals(other);
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
18 years