Quand je fais un merge sur un objet avec un Id simple pas de soucis (l objet n existe pas en DB et n est pas deja attache). Generator=assigned
Les memes conditions avec un composite-id me renvoi un objet aux ids=null
Pourquoi ?
Quand je fais un merge sur un objet avec un Id simple pas de soucis (l objet n existe pas en DB et n est pas deja attache). Generator=assigned
Les memes conditions avec un composite-id me renvoi un objet aux ids=null
Pourquoi ?
Bonjour,
faut montrer un peu de code.
Cordialement,
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !
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 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Generated May 10, 2011 1:14:11 PM by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="com.amadeus.sep.lsr.refautomation.reference_bo.CityName" table="TP_CityName"> <composite-id> <key-property name="languageCode" column="LanguageCode" type="java.lang.String"></key-property> <key-property name="cityCode" column="CityCode" type="java.lang.String"></key-property> <generator class="assigned"></generator> </composite-id> <property column="CityName" generated="never" lazy="false" name="cityName" /> </class> </hibernate-mapping>on niveau DAO (le merge pour des raisons de robustesse):
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 public class CityName extends Entity implements Serializable{ /** * */ private static final long serialVersionUID = -1053883640497293572L; private String languageCode; private String cityCode; private String cityName; //Internal usage private Boolean isAirport; //Internal usage private String relatedCityCode; public CityName(){ super.setIdFieldsName("cityCode","languageCode"); super.setComparedFieldsName("cityName"); } public String getRelatedCityCode() { return relatedCityCode; } public void setRelatedCityCode(String relatedCityCode) { this.relatedCityCode = relatedCityCode; } public Boolean getIsAirport() { return isAirport; } public void setIsAirport(Boolean isAirport) { this.isAirport = isAirport; } public String getLanguageCode() { return languageCode; } public void setLanguageCode(String languageCode) { this.languageCode = languageCode; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getCityName() { return cityName; } public void setCityName(String cityName) { this.cityName = cityName; } public String toString(){ return "CityName: "+cityCode+" - "+languageCode; } }
L'objet mergedEntity a des valeurs de Id null pour le composite ci dessus décrit
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 /** * Save or Update the entity */ public T makePersistent(T entity) throws HibernateException { T mergedEntity=null; try { this.beginTransaction(); mergedEntity=(T)this.openSession().merge(entity); this.openSession().saveOrUpdate(mergedEntity); } catch (HibernateException e) { this.handleHibernateException(e); throw e; } return entity; }
et il avait un id avant le merge?
Je ne vois pas trop l'utilité du merge suivi du saveorupdate...
Et en plus dans une session différente ? Puisque tu as deux openSession consécutifs...
Partager