Problemas com Hibernate e postgres (erro: org.hibernate.AssertionFailure: null identifier)

Boa noite pessoal, sou novo no fórum e gostaria de ter uma ajuda de vocês. Estou trabalhando com Hibernate e postgres

Criei as seguintes classes

@Entity  
@SequenceGenerator(name = "user_userid_seq", 
                   sequenceName = "user_userid_seq", 
                   allocationSize = 1, initialValue = 1) 
@Table(name="USER")
public class User implements Serializable{
	
	private Integer userId;
    private Profile profile;

    @OneToOne(fetch = FetchType.LAZY, mappedBy = "user")
	public Profile getProfile() {
		return profile;
	}

	public void setProfile(Profile profile) {
		this.profile = profile;
	}
 
	@Id	
	@Column(name="USERID", nullable=false)	
	@GeneratedValue(generator="user_userid_seq")	
	public int getUserId() {
    	return userId;
    }

    public void setUserId(int userId) {
    	this.userId = userId;
    }    
}


@Entity
@Table(name="PROFILE")
public class Profile implements Serializable {
	
	private Integer profileId;
	private User user;	
	private Set <Abuse> abuses;		
	
	@OneToOne(fetch = FetchType.LAZY)
	@PrimaryKeyJoinColumn	
	public User getUser() {
		return user;
	}
	
	public void setUser(User user) {
		this.user = user;
	}
	
	@GenericGenerator(name = "generator", strategy = "foreign", 
			          parameters = @Parameter(name = "property", value = "user"))
	@Id
	@GeneratedValue(generator = "generator")
	@Column(name = "PROFILEID", unique = true, nullable = false)	
	public Integer getProfileId() {
		return profileId;
	}

	public void setProfileId(Integer profileId) {
		this.profileId = profileId;
	}	
	
	@OneToMany(fetch=FetchType.EAGER, mappedBy = "profile")
	public Set<Abuse> getAbuses() {
		return this.abuses;
	}
	public void setAbuses(Set<Abuse> abuses) {
		this.abuses = abuses;
	}	
}

@Entity
@SequenceGenerator(name = "news_newsid_seq", 
                   sequenceName = "news_newsid_seq", 
                   allocationSize = 1, initialValue = 1) 
@Table(name = "POST")
public class Post implements Serializable{


	private Integer postId;
	private Set<Abuse> abuses;
	
	@Id
	@Column(name = "POSTID", unique = true, nullable = false)
	@GeneratedValue(generator="news_newsid_seq")
	public Integer getPostId() {
		return postId;
	}

	public void setPostId(Integer postId) {
		this.postId = postId;
	}
	
	@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL, mappedBy = "post")
	public Set<Abuse> getAbuses() {
		return this.abuses;
	}
	
	public void setAbuses(Set<Abuse> abuses) {
		this.abuses = abuses;
	}
}

@Entity
@Table(name = "ABUSE_PROFILE_POSTS")
@SequenceGenerator(name = "abuse_profile_news_abuse_id_seq", 
                   sequenceName = "abuse_profile_news_abuse_id_seq", 
                   allocationSize = 1, initialValue = 1)
public class Abuse implements Serializable{

	private Integer abuseId;
	private Post post;
	private Profile profile;
		
	@Id
	@Column(name = "ABUSE_ID", unique = true, nullable = false)
	@GeneratedValue(generator="abuse_profile_news_abuse_id_seq")
	public Integer getAbuseId() {
		return abuseId;
	}

	public void setAbuseId(Integer abuseId) {
		this.abuseId = abuseId;
	}
	
	@ManyToOne
	@JoinColumn (name = "POSTID", nullable=false)
	public Post getPost() {
		return post;
	}

	public void setPost(Post post) {
		this.post= post;
	}

	@ManyToOne
	@JoinColumn (name = "PROFILEID", nullable=false)
	public Profile getProfile() {
		return profile;
	}

	public void setProfile(Profile profile) {
		this.profile = profile;
	}	
	
}

Omiti os construtores das classes para o post não ficar muito longo.

Reparem que a classe Abuse é uma classe de relacionamento entre Profile e Post, e Profile e User tem um relacionamento de 1 para 1.

Quando tento usar esse método abaixo de uma classe DAO

public User getUser(User user){
		
		Session session = HibernateUtil.getSessionFactory().openSession();
		
		try {			
			session.beginTransaction();
			Query query = session.createQuery("FROM User WHERE userId = :id");
			query.setParameter("id", user.getUserId());
			List list = query.list();
			
			if (!list.isEmpty())
				return (User) list.get(0);
			else
				return null;
			
		} catch (HibernateException e) {
			System.out.println("Problemas ao buscar um usuário específico.");
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally {
			session.close();
		}
		return null;
	}

é disparado o seguinte erro:

org.hibernate.AssertionFailure: null identifier
	org.hibernate.engine.spi.EntityKey.<init>(EntityKey.java:69)
	org.hibernate.internal.AbstractSessionImpl.generateEntityKey(AbstractSessionImpl.java:245)
	org.hibernate.loader.Loader.extractKeysFromResultSet(Loader.java:725)
	org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:638)
	org.hibernate.loader.Loader.doQuery(Loader.java:853)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:292)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:262)
	org.hibernate.loader.Loader.loadEntity(Loader.java:1976)
	org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82)
	org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72)
	org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3720)
	org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:458)
	org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:427)
	org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204)
	org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:260)
	org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148)
	org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:1079)
	org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:1006)
	org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:613)
	org.hibernate.type.EntityType.resolve(EntityType.java:441)
	org.hibernate.engine.internal.TwoPhaseLoad.doInitializeEntity(TwoPhaseLoad.java:168)
	org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:134)
	org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:998)
	org.hibernate.loader.Loader.doQuery(Loader.java:877)
	org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:292)
	org.hibernate.loader.Loader.doList(Loader.java:2381)
	org.hibernate.loader.Loader.doList(Loader.java:2367)
	org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2197)
	org.hibernate.loader.Loader.list(Loader.java:2192)
	org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470)
	org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
	org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
	org.hibernate.internal.SessionImpl.list(SessionImpl.java:1248)
	org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
	com.indicibus.persistence.UserPersistense.getUser(UserPersistense.java:61)
	com.indicibus.control.SubmitAbuseControl.userExists(SubmitAbuseControl.java:127)
	com.indicibus.control.SubmitAbuseControl.submitAbuseControl(SubmitAbuseControl.java:161)
	com.indicibus.control.SubmitAbuseControl.processRequest(SubmitAbuseControl.java:44)
	com.indicibus.control.SubmitAbuseControl.doGet(SubmitAbuseControl.java:49)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Alguém, por favor, poderia me dizer qual o problema. Já tentei de tudo e vasculhei em toda parte e não consigo ver o erro e muito menos encontrar algo similar na web.
Desde já agradeço.

voce precisa por o @Id na variavel e não no método

Gilberto,

Particularmente acho que você complicou demais sua solução.
Se você estiver gerando o banco pelo Hibernate (não mapeando um banco legado), várias de suas opções são redundantes ou desnecessárias.
Deixe o Hibernate tomar conta dos nomes para você por exemplo.
Opções de fetch com EAGER são desencorajadas. Lazy loading é automático (não precisa especificar).

Eu faria algo assim:[code]@Entity
public class User implements Serializable{

@Id    
@GeneratedValue
private Integer id;

@OneToOne( mappedBy = "user" )
private Profile profile;

// getters e setters

}

@Entity
public class Profile implements Serializable {

@Id    
@GeneratedValue
private Integer id;

@OneToOne
private User user;

@OneToMany( mappedBy = "profile" )
private Set<Abuse> abuses;

// getters e setters

}

@Entity
public class Post implements Serializable{

@Id
@GeneratedValue
private Integer id;

@OneToMany( mappedBy = "post" )
private Set<Abuse> abuses;

// getters e setters

}

@Entity
public class Abuse implements Serializable {

@Id
@GeneratedValue
private Integer id;

@ManyToOne
@NotNull
private Post post;

@ManyToOne
@NotNull
private Profile profile;
    
// getters e setters

}[/code]Não se esqueça também que como você usou coleções do tipo Set, você vai precisar implementar o método equals de cada classe para que os objetos que os Sets gerenciam sejam inseridos corretamente (Sets não aceitam duplicatas)

Olá Pessoal, obrigado pela ajuda.
Segui o conselho de vocês.
Descobri que o problema esta quando faço esse relacionamento OneToMany entre Abuse e Profile. Usei Collection ao invés de Set, talvez é porque não havia implementado equals, como nosso amigo David disse. Vou fazer o teste para me assegurar. A mudança foi a seguinte:

@OneToMany(cascade=CascadeType.ALL, mappedBy = "profile")
private Collection<Abuse> abuses;

Obrigado mesmo pela ajuda de vocês