Java JPA Mapping - Could not determine type for: java.util.List, at table

furryhamster

Lieutenant
Dabei seit
Okt. 2008
Beiträge
1.022
Hi,

habe zwei Tabellen die gemappt werden. Jede Abwesenheit kann eine oder mehrere Abwesenheit_cal enthalten. Jede Abwesenheit_cal gehört zu einer Abwesenheit. Derzeit bekomme ich folgende Exception:

Code:
Caused by: org.hibernate.MappingException: Could not determine type for: java.util.List, at table: abwesend, for columns: [org.hibernate.mapping.Column(abwesenheit_cal)]
	at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:314)
	at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:292)
	at org.hibernate.mapping.Property.isValid(Property.java:239)
	at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:469)
	at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
	at org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1746)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
	... 35 more
Die Abwesenheit (verkürzt) sieht wie folgt aus:
Code:
@Entity
@DynamicUpdate
@Table(name = "abwesend")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@BatchSize(size = 10)
public class Abwesenheit implements Serializable {

	private Integer id;

	public Abwesenheit() {
		// fuer Hibernate und Tests
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "lfd_nr", insertable = false, updatable = false)
	public Integer  getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@OneToMany(targetEntity=Abwesenheit_cal.class ,cascade = CascadeType.ALL, mappedBy="abwesenheit", fetch = FetchType.LAZY, orphanRemoval = true)
	@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE })
	private List<Abwesenheit_cal> abwesenheit_cal;

	public List<Abwesenheit_cal> getAbwesenheit_cal() {
		return abwesenheit_cal;
	}

	public void setAbwesenheit_cal(List<Abwesenheit_cal> abwesenheit_cal) {
		this.abwesenheit_cal = abwesenheit_cal;
	}
}
Die Abwesend_cal so:
Code:
@Entity
@DynamicUpdate
@Table(name = "abwesend_cal")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@BatchSize(size = 10)
public class Abwesenheit_cal {
	
	private Integer ac_lfd_nr;
	private Integer lfd_nr;

	
	public Abwesenheit_cal() {
		// fuer Hibernate und Tests
	}
	
	@ManyToOne(optional=false, fetch = FetchType.LAZY, targetEntity=Abwesenheit.class)
	@JoinColumn(name = "lfd_nr")
	private Abwesenheit abwesenheit;
	
	public Abwesenheit getAbwesenheit() {
		return abwesenheit;
	}

	public void setAbwesenheit(Abwesenheit abwesenheit) {
		this.abwesenheit = abwesenheit;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "ac_lfd_nr", insertable = false, updatable = false)
	public Integer getAc_lfd_nr() {
		return ac_lfd_nr;
	}

	public void setAc_lfd_nr(Integer ac_lfd_nr) {
		this.ac_lfd_nr = ac_lfd_nr;
	}
}
Was passt am mapping noch nicht?
 

feuse8

Lt. Junior Grade
Dabei seit
Mai 2008
Beiträge
298
Vermutlich ist Hibernate nicht ganz so schlau und du musst eine konkrete List Implementierung verwenden. Versuchs testhalber mal mit ArrayList statt List.
 

SheepShaver

Captain
Dabei seit
Nov. 2004
Beiträge
3.665
Der Punkt ist, dass du die List selbst initialisieren musst, also

Code:
private List<Abwesenheit_cal> abwesenheit_cal = new ArrayList<Abwesenheit_cal>();
 

furryhamster

Lieutenant
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
1.022
Mit folgendem erhalte ich die gleiche Meldung:
Code:
	@OneToMany(targetEntity=Abwesenheit_cal.class ,cascade = CascadeType.ALL, mappedBy="abwesenheit", fetch = FetchType.LAZY, orphanRemoval = true)
	@Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE })
	private List<Abwesenheit_cal> abwesenheit_cal = new ArrayList<Abwesenheit_cal>();
Wenn ich statt List direkt ArrayList nehme scheint es zu funktionieren :)
 

SheepShaver

Captain
Dabei seit
Nov. 2004
Beiträge
3.665
Nee nee, das solltest du nicht tun. Die Annotations sind auch teilweise an der falschen Stelle (Getter statt Feld).
 

furryhamster

Lieutenant
Ersteller dieses Themas
Dabei seit
Okt. 2008
Beiträge
1.022
Habs jetzt angepasst und läuft :)
kriege jetzt allerdings die Meldung "Column (abwesenheit_cal) not found in any table in the query (or SLV is undefined)." Der scheint noch nicht zu kapieren, dass abwesenheit_cal keine spalte sondern eine separate tabelle ist. Wie bekomme ich das denn in den Griff?
 
Top