IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Problème de mapping Foreign key one-to-one


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut Problème de mapping Foreign key one-to-one
    bonjour a tout
    j ai deux tables avec les mêmes cles primaires. Remarque que c est pas moi le dbA et quand je fais l association entre les deux j ai l erreur suivante
    org.hibernate.MappingException: Foreign key (FKFB4D24995E3F6999:tpp_info [branch_cd,account_cd,client_nbr,ap_seq_nbr])) must have same number of columns as the referenced primary key (TACC_PARTY_NAME [branch_cd,account_cd,client_nbr,ap_seq_nbr])
    at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:90)
    at org.hibernate.mapping.ForeignKey.alignColumns(ForeignKey.java:73)
    at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1263)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1170)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)
    at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)
    at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1201)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1171)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:425)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:251)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:156)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:248)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:284)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:91)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:75)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:65)
    at ca.penson.bpsa.BPSAManagerFactory.<clinit>(BPSAManagerFactory.java:18)
    at ca.penson.xml2cra.struts.EditReceiptAction.retrieveAccount(EditReceiptAction.java:720)
    at ca.penson.xml2cra.struts.EditReceiptAction.search_onClick(EditReceiptAction.java:830)
    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:585)
    at com.cc.framework.adapter.struts.ActionUtil.handleFormAction(Unknown Source)
    at com.cc.framework.adapter.struts.FWAction.handleFormAction(Unknown Source)
    at com.cc.framework.adapter.struts.ActionUtil.execute(Unknown Source)
    at com.cc.framework.adapter.struts.FWAction.execute(Unknown Source)
    at com.cc.framework.adapter.struts.FWAction.execute(Unknown Source)
    at com.cc.framework.adapter.struts.RequestProcessorUtil.processAction(Unknown Source)
    at com.cc.framework.adapter.struts.FWTilesRequestProcessor.processActionPerform(Unknown Source)
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:75)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:581)
    at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:420)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
    at java.lang.Thread.run(Thread.java:595)
    voici mes pojos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
    package pojo;
     
     
    import java.io.Serializable;
     
    public class InfoClient implements Serializable{
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
    	// primary key
    	private String branchCd;
    	private String accountCd;
    	private String clientNbr;
    	private Short apSeqNbr;
    	private String shortNm;
    	private String firstName;
    	private String lastName;
    	private PartyName partyName;
    	public PartyName getPartyName() {
    		return partyName;
    	}
    	public void setPartyName(PartyName partyName) {
    		this.partyName = partyName;
    	}
    	public String getBranchCd() {
    		return branchCd;
    	}
    	public void setBranchCd(String branchCd) {
    		this.branchCd = branchCd;
    	}
    	public String getAccountCd() {
    		return accountCd;
    	}
    	public void setAccountCd(String accountCd) {
    		this.accountCd = accountCd;
    	}
    	public String getClientNbr() {
    		return clientNbr;
    	}
    	public void setClientNbr(String clientNbr) {
    		this.clientNbr = clientNbr;
    	}
    	public Short getApSeqNbr() {
    		return apSeqNbr;
    	}
    	public void setApSeqNbr(Short apSeqNbr) {
    		this.apSeqNbr = apSeqNbr;
    	}
    	public String getShortNm() {
    		return shortNm;
    	}
    	public void setShortNm(String shortNm) {
    		this.shortNm = shortNm;
    	}
    	public String getFirstName() {
    		return firstName;
    	}
    	public void setFirstName(String firstName) {
    		this.firstName = firstName;
    	}
    	public String getLastName() {
    		return lastName;
    	}
    	public void setLastName(String lastName) {
    		this.lastName = lastName;
    	}
     
     
    	@Override
    	public int hashCode() {
    		final int prime = 31;
    		int result = 1;
    		result = prime * result
    				+ ((accountCd == null) ? 0 : accountCd.hashCode());
    		result = prime * result
    				+ ((apSeqNbr == null) ? 0 : apSeqNbr.hashCode());
    		result = prime * result
    				+ ((branchCd == null) ? 0 : branchCd.hashCode());
    		result = prime * result
    				+ ((clientNbr == null) ? 0 : clientNbr.hashCode());
    		return result;
    	}
    	@Override
    	public boolean equals(Object obj) {
    		if (this == obj)
    			return true;
    		if (obj == null)
    			return false;
    		if (getClass() != obj.getClass())
    			return false;
    		InfoClient other = (InfoClient) obj;
    		if (accountCd == null) {
    			if (other.accountCd != null)
    				return false;
    		} else if (!accountCd.equals(other.accountCd))
    			return false;
    		if (apSeqNbr == null) {
    			if (other.apSeqNbr != null)
    				return false;
    		} else if (!apSeqNbr.equals(other.apSeqNbr))
    			return false;
    		if (branchCd == null) {
    			if (other.branchCd != null)
    				return false;
    		} else if (!branchCd.equals(other.branchCd))
    			return false;
    		if (clientNbr == null) {
    			if (other.clientNbr != null)
    				return false;
    		} else if (!clientNbr.equals(other.clientNbr))
    			return false;
    		return true;
    	}
     
     
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    package pojo;
     
    import java.io.Serializable;
     
    public class PartyName implements Serializable {
    	private static final long serialVersionUID = 1L;
    	// primary key
    	private String branchCd;
    	private String accountCd;
    	private String clientNbr;
    	private Short apSeqNbr;
     
    	// fields
    	private String languageCd;
    	private String socSecTaxCd;
    	private String socSecNbr;
    	public String getBranchCd() {
    		return branchCd;
    	}
    	public void setBranchCd(String branchCd) {
    		this.branchCd = branchCd;
    	}
    	public String getAccountCd() {
    		return accountCd;
    	}
    	public void setAccountCd(String accountCd) {
    		this.accountCd = accountCd;
    	}
    	public String getClientNbr() {
    		return clientNbr;
    	}
    	public void setClientNbr(String clientNbr) {
    		this.clientNbr = clientNbr;
    	}
    	public Short getApSeqNbr() {
    		return apSeqNbr;
    	}
    	public void setApSeqNbr(Short apSeqNbr) {
    		this.apSeqNbr = apSeqNbr;
    	}
    	public String getLanguageCd() {
    		return languageCd;
    	}
    	public void setLanguageCd(String languageCd) {
    		this.languageCd = languageCd;
    	}
    	public String getSocSecTaxCd() {
    		return socSecTaxCd;
    	}
    	public void setSocSecTaxCd(String socSecTaxCd) {
    		this.socSecTaxCd = socSecTaxCd;
    	}
    	public String getSocSecNbr() {
    		return socSecNbr;
    	}
    	public void setSocSecNbr(String socSecNbr) {
    		this.socSecNbr = socSecNbr;
    	}
    }
    et mes hbm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="pojo">
    	<class name="InfoClient" table="tpp_info">
    	<composite-id >
    			<key-property 
    			column="branch_cd"
    			length="3"
    			name="branchCd"
    			type="string"/>
    	
    		
    			<key-property  column="account_cd"
    			length="5"
    			name="accountCd"
    			type="string"/>
    				
    				<key-property 
    			column="client_nbr"
    			length="4"
    			name="clientNbr"
    			type="string"/>
    			
    			
    			<key-property 
    			column="ap_seq_nbr"
    			length="5"
    			name="apSeqNbr"
    			type="java.lang.Short"/>
    			
    		</composite-id>
    		<property
    			column="short_nm"
    			length="20"
    			name="shortNm"
    			not-null="false"
    			type="string"
    		 />
    		 
    		 <property
    			column="first_sps_nm"
    			length="20"
    			name="firstName"
    			not-null="false"
    			type="string"
    		 />
    		 <property
    			column="last_sps_nm"
    			length="20"
    			name="lastName"
    			not-null="false"
    			type="string"
    		 />
    		 
    		 <many-to-one name="partyName"
    			class="pojo.PartyName"
    			cascade="all"
    			column="branch_cd,account_cd,client_nbr,ap_seq_nbr"
    			unique="true"
    			/>
    		
    		
    </class>
    </hibernate-mapping>
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping package="pojo">
    	<class name="PartyName" table="TACC_PARTY_NAME">
    	<composite-id >
    			<key-property 
    			column="branch_cd"
    			length="3"
    			name="branchCd"
    			type="string"/>
     
     
    			<key-property  column="account_cd"
    			length="5"
    			name="accountCd"
    			type="string"/>
     
    				<key-property 
    			column="client_nbr"
    			length="4"
    			name="clientNbr"
    			type="string"/>
     
     
    			<key-property 
    			column="ap_seq_nbr"
    			length="5"
    			name="apSeqNbr"
    			type="java.lang.Short"/>
     
    		</composite-id>
    		<property
    			column="language_cd"
    			length="1"
    			name="languageCd"
    			not-null="false"
    			type="string"
    		 />
    		 <property
    			column="soc_sec_tax_cd"
    			length="1"
    			name="socSecTaxCd"
    			not-null="false"
    			type="string"
    		 />
    		 		<property
    			column="soc_sec_nbr"
    			length="9"
    			name="socSecNbr"
    			not-null="false"
    			type="string"
    		 />
     
    </class>
    </hibernate-mapping>
    donc il me dit que la clé étrangère devrait être égal
    a la clé primaire de l autre table ce qui est le cas.
    Donc je vois pas ce qu'il veut.

  2. #2
    Membre confirmé Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Par défaut
    Salut,

    J'ai 2 questions :
    => en base, ta table InfoClient contient-t-elle bien, entre autre, 4 colonnes : "branch_cd", account_cd", "client_nbr" et "ap_seq_nbr" ?
    => concernant la même table : contient-t-elle bien une contrainte (clé étrangère) qui référence les 4 colonnes citées au-dessus de ta table PartyName?

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2002
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 219
    Par défaut
    rebonjour, alors
    thibane dit
    J'ai 2 questions :
    => en base, ta table InfoClient contient-t-elle bien, entre autre, 4 colonnes : "branch_cd", account_cd", "client_nbr" et "ap_seq_nbr" ?
    => concernant la même table : contient-t-elle bien une contrainte (clé étrangère) qui référence les 4 colonnes citées au-dessus de ta table PartyName?
    alors voici le ddl de tpp_info
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    CREATE TABLE "dbo"."tpp_info"
    (
       client_nbr char(4) NOT NULL,
       branch_cd char(3) NOT NULL,
       account_cd char(5) NOT NULL,
       ap_seq_nbr smallint NOT NULL,
       action char(1) NOT NULL,
       first_sps_nm char(20),
       last_sps_nm char(20),
       short_nm char(20),
       record_type_cd char(3) NOT NULL,
       rr_cd char(3),
       updt_last_tmstp datetime NOT NULL
    )
    ;
    CREATE UNIQUE INDEX tpp_info_idc ON "dbo"."tpp_info"
    (
      client_nbr,
      branch_cd,
      account_cd,
      ap_seq_nbr
    )
    ;
    et de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    CREATE TABLE "dbo"."tacc_party_name"
    (
       client_nbr char(4) NOT NULL,
       branch_cd char(3) NOT NULL,
       account_cd char(5) NOT NULL,
       ap_seq_nbr smallint NOT NULL,
       action char(1) NOT NULL,
       language_cd char(1),
       soc_sec_tax_cd char(1),
       soc_sec_nbr char(9),
       updt_last_tmstp datetime NOT NULL
    )
    ;
    CREATE UNIQUE INDEX tacc_party_name_idc ON "dbo"."tacc_party_name"
    (
      client_nbr,
      branch_cd,
      account_cd,
      ap_seq_nbr
    )
    ;
     
    donc j ai des unique index dans les deux tables qui sont les memes
    merci

  4. #4
    Membre confirmé Avatar de thibane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2007
    Messages : 143
    Par défaut
    Bonsoir Chady

    Si tu m'as montré tout ce que tu avais concernant la création des tables "tacc_party_name" et "tpp_info", alors il te manque un truc.

    J'ai l'impression qu'il y a une incohérence entre tes fichiers hbm, où dans InfoClient tu déclares bien une référence à PartyName, et ta base où à part les mêmes noms de colonne (ce qui ne représente en rien une référence, ni pour ta base, ni pour Hibernate...), tu n'as aucune référence entre tes tables.

    Je serais tenté d'ajouter une clé étrangère à tpp_info qui référence les 4 colonnes qui composent la clé primaire de party_name, ça collerait déjà plus avec les pojo que tu as filé dans le 1er post.

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/12/2010, 12h08
  2. [NHibernate] Mapping foreign key
    Par Seth77 dans le forum NHibernate
    Réponses: 2
    Dernier message: 02/08/2010, 09h57
  3. Problème avec une FOREIGN KEY
    Par spiner900 dans le forum Requêtes
    Réponses: 9
    Dernier message: 04/03/2009, 14h31
  4. Réponses: 2
    Dernier message: 10/08/2007, 11h46
  5. probléme dans les foreign key
    Par infomari dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/07/2007, 15h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo