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

furryhamster

Lt. Commander
Registriert
Okt. 2008
Beiträge
1.100
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?
 
Vermutlich ist Hibernate nicht ganz so schlau und du musst eine konkrete List Implementierung verwenden. Versuchs testhalber mal mit ArrayList statt List.
 
Der Punkt ist, dass du die List selbst initialisieren musst, also

Code:
private List<Abwesenheit_cal> abwesenheit_cal = new ArrayList<Abwesenheit_cal>();
 
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 :)
 
Nee nee, das solltest du nicht tun. Die Annotations sind auch teilweise an der falschen Stelle (Getter statt Feld).
 
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?
 
Zurück
Oben