Problem z Criteria

0

Mam problem z kryteriami a już nie wspomnę o wpakowaniu wyników do tabeli
mam 2 tabele A i B w tabeli B mam tylko 2 kolumny ID i nazwa. W kolumnie A mam 6 kolumn id,int x1,String x2 String x3 ... string x5, int tabelaB.ID

relacje 1:n/n:1

Chce uzyskać wynik z kryteriów i wsadzić go do tableModel. Przed relacjami robiłem to tak że wyniki uzyskane po przepuszczeniu przez kryteria wsysalnym do modeluTabeli i śmigało a teraz utknąłem.
Teoretycznie ma to wyglądać tak 7 JTextField/ComboBox wszystkie puste. Persona wybiera kilka losowych parametrów aby wyszukać jakieś rekordy. Do funkcji przekazuje wybrane parametry a te konwertuje i robię z nich criteria za pomocą conjunction ale doszły mi relacje i nie wiem jak to zrobić... ;p I jak później to poprawić w modelu tabeli...

0

Doszedłem do tego:
//Klasa Dane

 
@Entity
public class HibernateData{

	private int EmpID;
	private String EmpFirstName;
	private String EmpLastName;
	private String EmpTel;
	private String EmpWorker;
	private int EmpAge;
	private String EmpDep;
	private HibernateDataDetail team;
	
	public HibernateData(){}
	@Id
	@GeneratedValue
	public int getEmpID() {
		return EmpID;
	}
	public void setEmpID(int empID) {
		EmpID = empID;
	}

	public String getEmpFirstName() {
		return EmpFirstName;
	}
	public void setEmpFirstName(String empFirstName) {
		EmpFirstName = empFirstName;
	}
	public String getEmpLastName() {
		return EmpLastName;
	}
	public void setEmpLastName(String empLastName) {
		EmpLastName = empLastName;
	}
	public String getEmpTel() {
		return EmpTel;
	}
	public void setEmpTel(String empTel) {
		EmpTel = empTel;
	}
	public String getEmpWorker() {
		return EmpWorker;
	}
	public void setEmpWorker(String empWorker) {
		EmpWorker = empWorker;
	}
	public int getEmpAge() {
		return EmpAge;
	}
	public void setEmpAge(int empAge) {
		EmpAge = empAge;
	}
	public String getEmpDep() {
		return EmpDep;
	}
	public void setEmpDep(String empDep) {
		EmpDep = empDep;
	}
	
	@ManyToOne
	@JoinColumn(name="TeamNameID")
	public HibernateDataDetail getTeam() {
		return team;
	}
	public void setTeam(HibernateDataDetail team) {
		this.team = team;
	}
	
}

Klasa detale:

 
@Entity
public class HibernateDataDetail {
	
	private int TeamID;
	private String TeamName;
	private List<HibernateData> Employee;
	
	public HibernateDataDetail (){}
	@Id
	@GeneratedValue
	public int getTeamID() {
		return TeamID;
	}
	public void setTeamID(int teamID) {
		TeamID = teamID;
	}
	public String getTeamName() {
		return TeamName;
	}
	public void setTeamName(String teamName) {
		TeamName = teamName;
	}
	
	@OneToMany(targetEntity=HibernateData.class,mappedBy="team",cascade=CascadeType.ALL,fetch=FetchType.EAGER)
	public List<HibernateData> getEmployee() {
		return Employee;
	}
	public void setEmployee(List<HibernateData> employee) {
		Employee = employee;
	}


}

W bazie powstały 2 tabele:
Dane: empID, empAge, empDep, empFirstName, empLastName, empTel, empWorker, TeamName
oraz DaneDetail: TeamID, TeamName

później stworzyłem w swingu formularz ktory pobiera dane i przekazuje do funkcji ta tworzy kryteria:

 		
		Criteria crit = session.createCriteria(HibernateData.class,"hd")
			.createCriteria("HibernateDataDetail","hdd");
		Conjunction con = Restrictions.conjunction();
		if(Id.isEmpty()==false){
			ID = Integer.parseInt(Id);
			con.add(Restrictions.eq("hd.EmpID",ID));
		}
		if(Fname.isEmpty()==false)
			con.add(Restrictions.ilike("hd.EmpFirstName",Fname));
		if(Lname.isEmpty()==false)
			con.add(Restrictions.ilike("hd.EmpLastName",Lname));
		if(Tel.isEmpty()==false)
			con.add(Restrictions.ilike("hd.EmpTel",Tel));
		if(Age.isEmpty()==false){
			Age1 = Integer.parseInt(Age);
			con.add(Restrictions.eq("hd.EmpAge",Age1));
		}
		if(bolworker==false)
			con.add(Restrictions.eq("hd.EmpWorker",Worker));
		if(boldep==false)
			con.add(Restrictions.eq("hd.EmpDep",Dep));
		if(bolteam==false)
			con.add(Restrictions.eq("hdd.TeamName",Team));
		critDetail.add(con);
		//koniec criteria =====================================================
		
		
		List<HibernateData> lista = critDetail.list();
		for(HibernateDatafData : lista){

				HibernateData r = new HibernateData();
				results.add(r);
		}

W zamian dostaje wyjątek:

Exception in thread "AWT-EventQueue-0" org.hibernate.QueryException: could not resolve property: HibernateDataDetail of: org.main.Hibernate.HibernateData
	at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:67)
	at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:61)
	at org.hibernate.persister.entity.AbstractEntityPersister.toType(AbstractEntityPersister.java:1375)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathEntityName(CriteriaQueryTranslator.java:227)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.createCriteriaEntityNameMap(CriteriaQueryTranslator.java:214)
	at org.hibernate.loader.criteria.CriteriaQueryTranslator.<init>(CriteriaQueryTranslator.java:104)
	at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:82)
	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1578)
	at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306)
	at org.hibernate.impl.CriteriaImpl$Subcriteria.list(CriteriaImpl.java:481)
	at org.main.Hibernate.ModData.findbutton(ModData.java:189)
	at org.main.Hibernate.ModData$2.actionPerformed(ModData.java:90)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
 

słabo się znam na relacjach wiec plz help ;]

0

zmieniłem w adnotacji mapowanie z OneToMany na OneToOne dwukierunkowe bo z tego co czytałem to jest odpowiednia relacja dla moich tabel

Ale nadal nie wiem jak stworzyć kryteria które po wybraniu losowych parametrów wyszuka mi danego użytkownika.
Gdy nie uwzględnię tej 2 tabeli w wyszukiwaniu to criteria mi działa poprawnie jeśli wybiorę 1 parametr i/lub 2,3,4,5,6 to wyszuka mi rekord ale jak dodam do tego wybór z 2 tabeli czyli TeamName to sypie wyjątkiem jak wyżej. Innymi słowy jak stworzyć criteria z zapytaniami OR bez względu na to z której tabeli będzie podany parametr. Czy to będzie imie/nazwisko/id z tabeli 1 i/czy nazwa Team'u z 2 tabeli.

Tego typu konstrukcje zapytań wydawały mi się czymś na porządku dziennym ale przeszukując google nie znalazłem nic co mogło by mi pomóc nawet w tutku hibernate jest tylko wzmianka o tym z przykładem który dla mnie jest całkowita abstrakcją, a nie ma żadnych rozbudowanych przykładów.
Musi być przecież jakiś sposób, Proszę o pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1