-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Hibernate 3.5 Migration issues
PostPosted: Mon Apr 05, 2010 3:16 pm 
Newbie

Joined: Mon Apr 05, 2010 3:09 pm
Posts: 2
I am trying to migrate our large 50+ entity hibernate application from 3.3 to 3.5, but it seems to be failing on annotated bindings that use @OneToMany. Perhaps this might be a hibernate-annotations bug? I have done various migrations from 3.0 to 3.3 without any issues until now. Any help is much appreciated.

Here is the full error.

Code:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jTransactionManager' defined in class path resource [c3p0.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
   at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
   at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
   at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
   at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
   at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
   at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
   at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1234)
   at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
   at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:460)
   at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
   at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
   at org.mortbay.jetty.Server.doStart(Server.java:222)
   at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
   at com.fab40.StandAlone.main(StandAlone.java:27)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   ... 25 more
Caused by: org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:421)
   at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:111)
   at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
   at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
   at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
   at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
   at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
   at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
   ... 32 more
*** ERROR [main]: Failed startup of context org.mortbay.jetty.webapp.WebAppContext@1b1c7295{/,src/webapp}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jTransactionManager' defined in class path resource [c3p0.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
   at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
   at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
   at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
   at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
   at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
   at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
   at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1234)
   at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
   at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:460)
   at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
   at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
   at org.mortbay.jetty.Server.doStart(Server.java:222)
   at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
   at com.fab40.StandAlone.main(StandAlone.java:27)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1412)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   ... 25 more
Caused by: org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:421)
   at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:111)
   at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
   at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
   at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
   at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
   at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
   at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
   ... 32 more
*** ERROR [main]: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jTransactionManager' defined in class path resource [c3p0.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [context.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2:
org.hibernate.AnnotationException: A Foreign key refering com.fab40.service.pojos.Article from com.fab40.service.pojos.ArticleComment has the wrong number of column. should be 2
   at org.hibernate.cfg.annotations.TableBinder.bindFk(TableBinder.java:421)
   at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:111)
   at org.hibernate.cfg.AnnotationConfiguration.processEndOfQueue(AnnotationConfiguration.java:541)
   at org.hibernate.cfg.AnnotationConfiguration.processFkSecondPassInOrder(AnnotationConfiguration.java:523)
   at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:380)
   at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1206)
   at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
   at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1469)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1409)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
   at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
   at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
   at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
   at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
   at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
   at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
   at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
   at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
   at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
   at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276)
   at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
   at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
   at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:548)
   at org.mortbay.jetty.servlet.Context.startContext(Context.java:136)
   at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1234)
   at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
   at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:460)
   at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
   at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
   at org.mortbay.jetty.Server.doStart(Server.java:222)
   at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
   at com.fab40.StandAlone.main(StandAlone.java:27)
*** INFO  [main]: Started SocketConnector@0.0.0.0:8090



Here is the article class

Code:

package com.fab40.service.pojos;

import com.base.persistance.defaults.defaulters.DefaultBooleanValue;
import com.base.persistance.pojo.IndexedDatedPojo;
import com.fab40.annotations.PostablePage;
import com.fab40.annotations.VoteComment;
import com.fab40.pages.ViewArticle;
import org.hibernate.annotations.*;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
import org.hibernate.search.annotations.Store;

import javax.persistence.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true, selectBeforeUpdate = true, dynamicInsert = true)
@Indexed
@Table(name = "articles")
@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@PostablePage(pageClass = ViewArticle.class)
@VoteComment(clazz = ArticleComment.class)
public class Article extends IndexedDatedPojo implements IPicturePostable, ICategoryPostable, ISlug, IVote, IPublish {
    private static final long serialVersionUID = 1L;

    @Column(name = "up_vote_count", nullable = false)
    private int upVoteCount = 0;
    @Column(name = "down_vote_count", nullable = false)
    private int downVoteCount = 0;

    @Field(index = Index.TOKENIZED, store = Store.NO)
    @Column(name = "subject", nullable = false, unique = true)
    private String subject;

    @Lob
    @Column(name = "json", nullable = true)
    private String json;

    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;

    @Column(name = "slug", nullable = false, unique = true)
    private String slug;

    @Lob
    @Field(index = Index.TOKENIZED, store = Store.NO)
    @Column(name = "body", nullable = false)
    private String body;

    @NotNull
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "category_id", nullable = false)
    private Category category;

    @Column(name = "image", nullable = false)
    private String image;

    @Column(name = "popularity", nullable = false)
    private int popularity;

    @Column(name = "producer_url", nullable = false)
    private String producerUrl;

    @Column(name = "author", nullable = false)
    private String author;

    @DefaultBooleanValue(true)
    @Column(name = "published", nullable = false)
    private Boolean published;

    @Column(name = "date_published")
    private Date datePublished;

    @OneToMany(targetEntity = ArticleComment.class, mappedBy = "article", cascade = {CascadeType.ALL}, fetch = FetchType.LAZY)
    @Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    @OrderBy("created asc")
    private Set<IComment> comments = new HashSet<IComment>();

    public String getSubject() {
        return subject;
    }

    public void setSubject(final String subject) {
        this.subject = subject;
    }

    public String getBody() {
        return body;
    }

    public void setBody(final String body) {
        this.body = body;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(final Category category) {
        this.category = category;
    }

    public void setImage(final String image) {
        this.image = image;
    }

    public String getImage() {
        return image;
    }

    public void setProducerUrl(final String producerUrl) {
        this.producerUrl = producerUrl;
    }

    public String getProducerUrl() {
        return producerUrl;
    }

    public void setAuthor(final String author) {
        this.author = author;
    }

    public String getAuthor() {
        return author;
    }

    public void setPublished(final Boolean published) {
        this.published = published;
    }

    public Boolean getPublished() {
        return published;
    }

    public void setComments(final Set<IComment> comments) {
        this.comments = comments;
    }

    public Set<IComment> getComments() {
        return comments;
    }

    public void setPopularity(final int popularity) {
        this.popularity = popularity;
    }
    public int getPopularity() {
        return popularity;
    }

    public void setUser(final User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }

    public void setSlug(final String slug) {
        this.slug = slug;
    }

    public String getSlug() {
        return slug;
    }

    public void setUpVoteCount(final int upVoteCount) {
        this.upVoteCount = upVoteCount;
    }

    public int getUpVoteCount() {
        return upVoteCount;
    }

    public void setDownVoteCount(final int downVoteCount) {
        this.downVoteCount = downVoteCount;
    }

    public int getDownVoteCount() {
        return downVoteCount;
    }

    public void setDatePublished(final Date datePublished) {
        this.datePublished = datePublished;
    }

    public Date getDatePublished() {
        return datePublished;
    }

    public String getJson() {
        return json;
    }

    public void setJson(String json) {
        this.json = json;
    }
}





Here is the article comment class

Code:

package com.fab40.service.pojos;

import com.base.persistance.pojo.DatedPojo;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.*;

import javax.persistence.CascadeType;
import javax.persistence.*;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.HashSet;
import java.util.Set;

@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true, selectBeforeUpdate = true, dynamicInsert = true)
@Table(name = "article_comments")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class ArticleComment extends DatedPojo implements IComment, IFeed, IVote {
    private static final long serialVersionUID = 1L;

    @Column(name = "up_vote_count", nullable = false)
    private int upVoteCount = 0;
    @Column(name = "down_vote_count", nullable = false)
    private int downVoteCount = 0;

    @OneToMany(mappedBy = "articleComment", cascade = CascadeType.ALL)
    @Cascade(value = org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
    @LazyCollection(LazyCollectionOption.EXTRA)
    private Set<FeedAction> feedActions = new HashSet<FeedAction>();

    @ManyToOne
    @JoinColumn(name = "user_id", nullable = false)
    private User user;

    @ManyToOne(optional = false)
    @JoinColumn(name = "article_id", nullable = false)
    private Article article;

    @Lob
    @Column(name = "body", nullable = false)
    private String body;

    public User getUser() {
        return user;
    }

    public void setUser(final User user) {
        this.user = user;
    }

    public Article getArticle() {
        return article;
    }

    public void setArticle(final Article article) {
        this.article = article;
    }

    public String getBody() {
        return body;
    }

    public void setBody(final String body) {
        this.body = body;
    }

    public IPostable getPostable() {
        return article;
    }

    public void setPostable(final IPostable postable) {
        article = (Article) postable;
    }

    public void setFeedActions(final Set<FeedAction> feedActions) {
        this.feedActions = feedActions;
    }

    public Set<FeedAction> getFeedActions() {
        return feedActions;
    }

    public void setUpVoteCount(final int upVoteCount) {
        this.upVoteCount = upVoteCount;
    }

    public int getUpVoteCount() {
        return upVoteCount;
    }

    public void setDownVoteCount(final int downVoteCount) {
        this.downVoteCount = downVoteCount;
    }

    public int getDownVoteCount() {
        return downVoteCount;
    }

}




Top
 Profile  
 
 Post subject: Re: Hibernate 3.5 Migration issues
PostPosted: Mon Apr 05, 2010 3:36 pm 
Newbie

Joined: Mon Apr 05, 2010 3:09 pm
Posts: 2
Forgot to add The Base Classes

Code:
package com.base.persistance.pojo;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import com.base.persistance.defaults.defaulters.DefaultDateValue;
import com.base.persistance.defaults.defaulters.DateSaveType.DateSave;

@MappedSuperclass
public abstract class DatedPojo implements Serializable, BasePojo {

   @Id
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id;

   @DefaultDateValue(DateSave.SAVE_CREATED)
   @Column(name = "created", nullable = false)
   @Temporal(TemporalType.TIMESTAMP)
   private Date created = new Date();

   @DefaultDateValue(DateSave.SAVE_UPDATED)
   @Column(name = "updated", nullable = false)
   @Temporal(TemporalType.TIMESTAMP)
   private Date updated = new Date();

   public DatedPojo() {
   }

   public DatedPojo(final int id) {
      this.id = id;
   }

   /*
    * (non-Javadoc)
    *
    * @see com.base.persistance.pojo.BasePojo#setCreated(java.util.Date)
    */
   public void setCreated(final Date created) {
      this.created = created;
   }

   /*
    * (non-Javadoc)
    *
    * @see com.base.persistance.pojo.BasePojo#getCreated()
    */
   public Date getCreated() {
      return created;
   }

   /*
    * (non-Javadoc)
    *
    * @see com.base.persistance.pojo.BasePojo#setUpdated(java.util.Date)
    */
   public void setUpdated(final Date updated) {
      this.updated = updated;
   }

   /*
    * (non-Javadoc)
    *
    * @see com.base.persistance.pojo.BasePojo#getUpdated()
    */
   public Date getUpdated() {
      return updated;
   }

   /*
    * (non-Javadoc)
    *
    * @see com.base.persistance.pojo.BasePojo#setId(long)
    */
   public void setId(final int id) {
      this.id = id;
   }

   /*
    * (non-Javadoc)
    *
    * @see com.base.persistance.pojo.BasePojo#getId()
    */
   public int getId() {
      return id;
   }

   @Override
   public boolean equals(final Object obj) {
      if (this == obj) {
         return true;
      }

      if (obj == null) {
         return false;
      }

      BasePojo p = (BasePojo) obj;

      if (getId() == 0 || p.getId() == 0) {
         return false;
      }

      if (this.getId() == p.getId()) {
         return true;
      } else {
         return false;
      }
   }

   @Override
   public int hashCode() {
      return 29 + this.getId();
   }
}



Code:
package com.base.persistance.pojo;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

import org.hibernate.search.annotations.DocumentId;

@MappedSuperclass
public abstract class IndexedDatedPojo extends DatedPojo {
   private static final long serialVersionUID = 1L;

   @Id
   @DocumentId
   @GeneratedValue(strategy = GenerationType.IDENTITY)
   private int id;

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

   @Override
   public int getId() {
      return id;
   }
}







Top
 Profile  
 
 Post subject: Re: Hibernate 3.5 Migration issues
PostPosted: Tue May 11, 2010 5:26 am 
Newbie

Joined: Tue May 11, 2010 5:14 am
Posts: 1
I had a similar problem.
The solution in my case was to remove @Id annotation in superclass.
Also, if the extending classes have same column names (e.g. "id"), the superclass column annotation should be @Column(name="id", insertable=false, updatable=false).


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.