[Hibernate-JIRA] Created: (HHH-6596) SQLServer2008Dialect: Problem with pageing. Aggregate function in group by
by Ralph Schaer (JIRA)
SQLServer2008Dialect: Problem with pageing. Aggregate function in group by
--------------------------------------------------------------------------
Key: HHH-6596
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6596
Project: Hibernate Core
Issue Type: Bug
Components: entity-manager
Affects Versions: 3.6.7
Environment: Hibernate 3.6.7.Final, Jtds 1.2.5, MS Sql Server 2008R2, Windows 7 x64, org.hibernate.dialect.SQLServer2008Dialect
Reporter: Ralph Schaer
Priority: Minor
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root<Employee> root = query.from(Employee.class);
query.select(builder.count(root)).distinct(true);
Long result = em.createQuery(query).getSingleResult();
These statements create the following sql query. This query does not work because group by contains an aggregate.
The statements are working with org.hibernate.dialect.SQLServerDialect.
Removing the distinct(true) also works but is not an option because this code is in a third party library.
Hibernate: WITH query AS (select ROW_NUMBER() OVER (ORDER BY CURRENT_TIMESTAMP) as __hibernate_row_nr__, count(employee0_.employeeid) as col_0_0_ from employee
employee0_ group by count(employee0_.employeeid)) SELECT * FROM query WHERE __hibernate_row_nr__ BETWEEN ? AND ?
14:10:03.482 [main] WARN o.h.util.JDBCExceptionReporter - SQL Error: 144, SQLState: S1000
14:10:03.485 [main] ERROR o.h.util.JDBCExceptionReporter - Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause.
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1215)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1148)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:307)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getSingleResult(CriteriaQueryCompiler.java:264)
Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:140)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:128)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.doList(Loader.java:2536)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
at org.hibernate.loader.Loader.list(Loader.java:2271)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:274)
... 2 more
Caused by: java.sql.SQLException: Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause.
at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820)
at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258)
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long employeeId;
@NotBlank
@Length(max = 30)
private String employeeName;
@NotBlank
@Length(max = 30)
private String employeeSurname;
@Length(max = 50)
private String job;
public long getEmployeeId() {
return employeeId;
}
public void setEmployeeId(long employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public String getEmployeeSurname() {
return employeeSurname;
}
public void setEmployeeSurname(String employeeSurname) {
this.employeeSurname = employeeSurname;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
14 years, 7 months
[Hibernate-JIRA] Created: (HHH-5847) @OneToOne annotation with optional = true generates an exception when value is null
by guy bashan (JIRA)
@OneToOne annotation with optional = true generates an exception when value is null
-----------------------------------------------------------------------------------
Key: HHH-5847
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5847
Project: Hibernate Core
Issue Type: Bug
Components: annotations
Affects Versions: 3.6.0
Reporter: guy bashan
I am currently in the process of upgrading from Hibernate 3.3 to 3.6.
I didn't have the following problem before the upgrade.
I am getting the following exception when trying to persist an object:
-------------------------------------------------------------------------------------
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.todacell.ui.model.bo.campaign.Campaign.targetDays
at org.hibernate.engine.Nullability.checkNullability(Nullability.java:100)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:312)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:203)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:129)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:685)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:677)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:673)
at com.todacell.ui.model.dao.BaseDAO.saveObject(BaseDAO.java:82)
at com.todacell.ui.model.dao.CampaignDAO.saveObject(CampaignDAO.java:23)
at com.todacell.ui.view.bean.campaign.CampaignGeneralInfoBean.saveAction(CampaignGeneralInfoBean.java:204)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
... 37 more
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
Seems like there is a problem when I am trying to persist the object with: targetDays empty (it should be empty at this point).
This is the bean I am using:
-----------------------------------
@Entity
@Table(name = "cmp_campaign")
public class Campaign implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "campaign_id")
private Integer campaignId;
@Column(name = "name")
@NotNull
@Length(max = 100)
private String name;
@Column(name = "creative_name")
@Length(max = 100)
private String creativeName;
@Column(name = "comments")
@Length(max = 4000)
private String comments;
@ManyToOne
@JoinColumn(name = "advertiser_id")
private Advertiser advertiser;
@ManyToOne
@JoinColumn(name = "agency_id")
private Agency agency;
@OneToMany(mappedBy = "campaign", cascade = {javax.persistence.CascadeType.ALL})
@OrderBy("adId")
@Cascade({org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<Ad> ads;
@OneToOne(mappedBy = "campaign")
@JoinColumn(name = "campaign_id")
@Cascade({org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private DeliveryLimits deliveryLimits;
@OneToOne(mappedBy = "campaign")
@JoinColumn(name = "campaign_id")
@Cascade({org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Cost cost;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "cmp_target_list_option",
joinColumns = {@JoinColumn(name = "campaign_id")},
inverseJoinColumns = @JoinColumn(name = "option_id"))
private Set<ListTargetingParamOption> listTargetingParamOptions;
@OneToOne(optional = true)
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@PrimaryKeyJoinColumn
private LastStatus lastStatus;
@OneToMany(mappedBy = "campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@Sort(type = SortType.COMPARATOR, comparator = TargetKeyword.TargetKeywordComparator.class)
private SortedSet<TargetKeyword> targetKeywords;
@OneToMany(mappedBy = "campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetNumberRange> targetNumberRanges;
@OneToOne(fetch = FetchType.LAZY, optional = true)
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE})
@PrimaryKeyJoinColumn
private TargetDays targetDays;
@OneToMany(mappedBy = "campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@Sort(type = SortType.COMPARATOR, comparator = TargetDayPart.TargetDayPartComparator.class)
private SortedSet<TargetDayPart> targetDayParts;
@OneToMany(mappedBy = "targetTesterPK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
@Sort(type = SortType.COMPARATOR, comparator = TargetTester.TargetTesterComparator.class)
private SortedSet<TargetTester> targetTesters;
@OneToMany(mappedBy = "targetLocationPK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetLocation> targetLocations;
@OneToMany(mappedBy = "targetCountryMobileOperatorPK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.ALL, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetOperator> targetOperators;
@OneToMany(mappedBy = "campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetSystem> targetSystems;
@OneToMany(mappedBy = "targetDevicePK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetDevice> targetDevices;
@OneToMany(mappedBy = "targetDeviceOsPK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetDeviceOs> targetDeviceOss;
@OneToMany(mappedBy = "targetIpPK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetIp> targetIps;
@OneToMany(mappedBy = "targetIpRangePK.campaign")
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Set<TargetIpRange> targetIpRanges;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "cmp_target_publisher",
joinColumns = {@JoinColumn(name = "campaign_id")},
inverseJoinColumns = @JoinColumn(name = "publisher_id"))
@Sort(type = SortType.COMPARATOR, comparator = Publisher.PublisherComparator.class)
private SortedSet<Publisher> targetPublishers;
@Column(name = "source")
@Type(type = "com.todacell.ui.model.persistence.StringValuedEnumType",
parameters = @Parameter(name = "enum", value = "com.todacell.ui.model.bo.system.CampaignSource"))
@NotNull
private CampaignSource source;
@ManyToOne
@JoinColumn(name = "third_party_id")
private ThirdPartyServer thirdPartyServer;
@ManyToOne
@JoinColumn(name = "order_id")
private Order order;
@Column(name = "time_zone")
@NotNull
@Length(max = 50)
private String timeZone;
@Column(name = "status_check_date")
private Date statusCheckDate;
@Column(name = "active")
private Boolean active;
@Column(name = "version_current_date")
private Date versionCurrentDate;
@Column(name = "version_deploy_date")
private Date versionDeployDate;
@Column(name = "category")
@Type(type = "com.todacell.ui.model.persistence.StringValuedEnumType",
parameters = @Parameter(name = "enum", value = "com.todacell.ui.model.bo.system.CampaignCategory"))
@NotNull
private CampaignCategory category;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "cmp_target_site",
joinColumns = {@JoinColumn(name = "campaign_id")},
inverseJoinColumns = @JoinColumn(name = "site_id"))
@Sort(type = SortType.COMPARATOR, comparator = Site.SiteComparator.class)
private SortedSet<Site> targetSites;
public Campaign() {
}
public Integer getCampaignId() {
return campaignId;
}
public void setCampaignId(Integer campaignId) {
this.campaignId = campaignId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCreativeName() {
return creativeName;
}
public void setCreativeName(String creativeName) {
this.creativeName = creativeName;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public Advertiser getAdvertiser() {
return advertiser;
}
public void setAdvertiser(Advertiser pubAdvertiser) {
this.advertiser = pubAdvertiser;
}
public Agency getAgency() {
return agency;
}
public void setAgency(Agency agency) {
this.agency = agency;
}
public Set<Ad> getAds() {
return ads;
}
public void setAds(Set<Ad> ads) {
this.ads = ads;
}
public DeliveryLimits getDeliveryLimits() {
return deliveryLimits;
}
public void setDeliveryLimits(DeliveryLimits deliveryLimits) {
this.deliveryLimits = deliveryLimits;
}
public Cost getCost() {
return cost;
}
public void setCost(Cost cost) {
this.cost = cost;
}
public Double getPublisherCost()
{
return CampaignPerformanceUtil.getPublisherCost(cost);
}
public LastStatus getLastStatus() {
return lastStatus;
}
public void setLastStatus(LastStatus lastStatus) {
this.lastStatus = lastStatus;
}
public Set<TargetKeyword> getTargetKeywords() {
return targetKeywords;
}
public void setTargetKeywords(SortedSet<TargetKeyword> targetKeywords) {
this.targetKeywords = targetKeywords;
}
public Set<TargetNumberRange> getTargetNumberRanges() {
return targetNumberRanges;
}
public void setTargetNumberRanges(Set<TargetNumberRange> targetNumberRanges) {
this.targetNumberRanges = targetNumberRanges;
}
public TargetDays getTargetDays() {
return targetDays;
}
public void setTargetDays(TargetDays targetDays) {
this.targetDays = targetDays;
}
public Set<TargetDayPart> getCmpTargetDayParts() {
return targetDayParts;
}
public void setCmpTargetDayParts(SortedSet<TargetDayPart> targetDayParts) {
this.targetDayParts = targetDayParts;
}
public Set<TargetTester> getTargetTesters() {
return targetTesters;
}
public void setTargetTesters(SortedSet<TargetTester> targetTesters) {
this.targetTesters = targetTesters;
}
public Set<TargetLocation> getTargetLocations() {
return targetLocations;
}
public void setTargetLocations(Set<TargetLocation> targetLocations) {
this.targetLocations = targetLocations;
}
public Set<TargetDevice> getTargetMobileDevices() {
return targetDevices;
}
public void setTargetMobileDevices(Set<TargetDevice> targetDevices) {
this.targetDevices = targetDevices;
}
public Set<TargetOperator> getTargetCountryMobileOperators() {
return targetOperators;
}
public Set<TargetDeviceOs> getTargetDeviceOss() {
return targetDeviceOss;
}
public void setTargetDeviceOss(Set<TargetDeviceOs> targetDeviceOss) {
this.targetDeviceOss = targetDeviceOss;
}
public Set<TargetIp> getTargetIps() {
return targetIps;
}
public void setTargetIps(Set<TargetIp> targetIps) {
this.targetIps = targetIps;
}
public void setTargetCountryMobileOperators(Set<TargetOperator> targetOperators) {
this.targetOperators = targetOperators;
}
public Set<TargetSystem> getTargetSystems() {
return targetSystems;
}
public void setTargetSystems(Set<TargetSystem> targetSystems) {
this.targetSystems = targetSystems;
}
public SortedSet<Publisher> getTargetPublishers() {
return targetPublishers;
}
public void setTargetPublishers(SortedSet<Publisher> targetPublishers) {
this.targetPublishers = targetPublishers;
}
public CampaignSource getSource() {
return source;
}
public void setSource(CampaignSource source) {
this.source = source;
}
public ThirdPartyServer getThirdPartyServer() {
return thirdPartyServer;
}
public void setThirdPartyServer(ThirdPartyServer thirdPartyServer) {
this.thirdPartyServer = thirdPartyServer;
}
public String getTimeZone() {
return timeZone;
}
public void setTimeZone(String timeZone) {
this.timeZone = timeZone;
}
public TimeZone getTimeZoneObj() {
return TimeZone.getTimeZone(timeZone);
}
public Date getStatusCheckDate() {
return statusCheckDate;
}
public void setStatusCheckDate(Date statusCheckDate) {
this.statusCheckDate = statusCheckDate;
}
public Boolean isActive() {
return active;
}
public void setActive(Boolean active) {
this.active = active;
}
public CampaignCategory getCategory() {
return category;
}
public void setCategory(CampaignCategory category) {
this.category = category;
}
public Date getVersionCurrentDate() {
return versionCurrentDate;
}
public void setVersionCurrentDate(Date versionCurrentDate) {
this.versionCurrentDate = versionCurrentDate;
}
public Date getVersionDeployDate() {
return versionDeployDate;
}
public void setVersionDeployDate(Date versionDeployDate) {
this.versionDeployDate = versionDeployDate;
}
public Set<ListTargetingParamOption> getListTargetingParamOptions() {
return listTargetingParamOptions;
}
public void setListTargetingParamOptions(Set<ListTargetingParamOption> listTargetingParamOptions) {
this.listTargetingParamOptions = listTargetingParamOptions;
}
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public List<Advertiser> getActiveAdvertisers(){
SysDAO dao = DAOFactory.getSysDAO();
return dao.getActiveAdvertisers();
}
public static class CampaignComparator implements Comparator<Campaign>, Serializable
{
public int compare(Campaign campaign1, Campaign campaign2)
{
return campaign1.getName().compareTo(campaign2.getName());
}
}
public SortedSet<Site> getTargetSites() {
return targetSites;
}
public void setTargetSites(SortedSet<Site> targetSites) {
this.targetSites = targetSites;
}
public Set<TargetIpRange> getTargetIpRanges() {
return targetIpRanges;
}
public void setTargetIpRanges(Set<TargetIpRange> targetIpRanges) {
this.targetIpRanges = targetIpRanges;
}
}
--
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
14 years, 7 months
[Hibernate-JIRA] Created: (HHH-5731) Javassist Enhancement fails when JPA Entity has an attribute named "handler"
by Jan Van Bulck (JIRA)
Javassist Enhancement fails when JPA Entity has an attribute named "handler"
----------------------------------------------------------------------------
Key: HHH-5731
URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-5731
Project: Hibernate Core
Issue Type: Bug
Affects Versions: 3.5.5
Environment: Hibernate 3.5.5 (I observed the problem in JBoss AS 6 M4 and M5)
(Database MySQL)
Reporter: Jan Van Bulck
I have an Entity called {{HandlerError}}, refering to another Entity called {{Handler}}
The getter {{getHandler()}} causes following problem when I deploy the application to JBoss 6 AS *M4*
{code}
15:49:37,306 ERROR [BasicLazyInitializer] Javassist Enhancement failed: c.u.p.model.HandlerError: java.lang.RuntimeException: duplicate method: getHandler in c.u.p.model.HandlerError_$$_javassist_11
at javassist.util.proxy.ProxyFactory.createClass3(ProxyFactory.java:509) [javassist.jar:6.0.0.20100721-M4]
at javassist.util.proxy.ProxyFactory.createClass2(ProxyFactory.java:486) [javassist.jar:6.0.0.20100721-M4]
at javassist.util.proxy.ProxyFactory.createClass1(ProxyFactory.java:422)
...
Caused by: javassist.bytecode.DuplicateMemberException: duplicate method: getHandler in c.u.p.model.HandlerError_$$_javassist_11
at javassist.bytecode.ClassFile.testExistingMethod(ClassFile.java:637) [javassist.jar:6.0.0.20100721-M4]
...
15:49:37,311 WARN [PojoEntityTuplizer] could not create proxy factory for:com.unifiedpost.payments.model.HandlerError: org.hibernate.HibernateException: Javassist Enhancement failed: c.u.p.model.HandlerError
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxyFactory(JavassistLazyInitializer.java:170) [:3.5.2-Final]
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.postInstantiate(JavassistProxyFactory.java:66) [:3.5.2-Final]
{code}
The same code works well in JBoss 6 AS *M3*.
||JBoss 6 Release||Javassist dependency||
|M3 |javassist-3.11.0.GA.jar|
|M4 |javassist-3.12.1.GA.jar|
|M5 |javassist-3.12.1.GA.jar|
|20101112 |javassist-3.12.1.GA.jar|
In between M3 and M4, following issue has been 'fixed': [JASSIST-97|https://jira.jboss.org/browse/JASSIST-97]
Not sure if it's related, but it looks close given the [patch|https://jira.jboss.org/secure/attachment/12332449/JASSIST-97.patch]
--
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
14 years, 7 months