[jboss-user] [EJB 3.0] - How to define unique constraint on foreign keys ?

chawax do-not-reply at jboss.com
Wed Oct 10 06:13:18 EDT 2007


Hi,

I need to define a unique constraint on foreign keys in a EJB3 entity.
I saw the @Table annotation has a uniqueConstraints attribute to do this, but when I add relation columns to the unique constraint, it can't find them.

For example, my entity has the following relations :

@javax.persistence.ManyToOne(optional = false)
  | @javax.persistence.JoinColumn(name = "NOEUD_ORGANISATION_FK")
  | public xxx.core.utilisateur.NoeudOrganisation getNoeudOrganisation()
  | {
  |         return this.noeudOrganisation;
  | }
  | 
  | @javax.persistence.ManyToOne(optional = false)
  | @javax.persistence.JoinColumn(name = "EMPLOYE_FK")
  | public xxx.core.utilisateur.Employe getEmploye()
  | {
  |         return this.employe;
  | }

To define a unique constraint on these columns, I added the following annotation to the class :

@javax.persistence.Entity
  | @javax.persistence.Table(
  | 		name = "UNITE_EMPLOYE",
  | 		uniqueConstraints = {@javax.persistence.UniqueConstraint(columnNames = {"employe", "noeudOrganisation"})})
  | public class UniteEmploye {
  | }
  | 

But I have the following error :
ERROR 10-10 11:48:23,656 (KernelErrors.java:validate:78)  -Failed deployment: persistence.units:jar=classes.jar,unitName=t4Seam
  | org.hibernate.MappingException: Unable to find column with logical name: UNITE_EMPLOYE.employe
  | 	at org.hibernate.cfg.Mappings.getPhysicalColumnName(Mappings.java:493)
  | 	at org.hibernate.cfg.AnnotationConfiguration.buildUniqueKeyFromColumnNames(AnnotationConfiguration.java:488)
  | 	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:310)
  | 	at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1039)
  | 	at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1015)
  | 	at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:154)
  | 	at org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Configuration.java:751)
  | 	at org.hibernate.ejb.Ejb3Configuration.createContainerEntityManagerFactory(Ejb3Configuration.java:350)
  | 	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:119)
  | 	at org.jboss.ejb3.entity.PersistenceUnitDeployment.start(PersistenceUnitDeployment.java:264)
  | 

How should I do this ?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4093401#4093401

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4093401



More information about the jboss-user mailing list