Hibernate Criteria

0

Mam problem z kryteriami wyszukiwania. Wysypuje mi zawartość całej bazy... Gdzieś zrobiłem błąd i nie mogę go znaleźć
Wszystko się kompiluje (niestety) Może ktoś zerknąć fachowym okiem i powiedzieć w czym rzecz?

		find.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent event){
					findbutton(fname,lname,tel,age,dep,worker);
				}


		});
	
	}
	private void findbutton(JTextField fname, JTextField lname, JTextField tel, JTextField age, JComboBox dep, JComboBox worker) {
		String Fname = fname.getText();
		String Lname = lname.getText();
		Session session = HibernateConfig.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		
		Criteria crit = session.createCriteria(HibernateData.class);
		Criterion namef = Restrictions.ilike("EmpFirstName",Fname);
		Criterion namel = Restrictions.ilike("EmpLastName",Lname);
		Disjunction disjunction = Restrictions.disjunction();
		disjunction.add(namef);
		disjunction.add(namel);
		List results = crit.list();
		
		
		Iterator iter = results.iterator();
		
		if (!iter.hasNext()) {
			System.out.println("No software to display.");
			return;
		}
		while (iter.hasNext()) {
			HibernateData data = (HibernateData) iter.next();
			String msg = data.getEmpFirstName() + "\t";
			msg += data.getEmpLastName() + "\t";
			msg += data.getEmpDep() + "\t";
			msg += data.getEmpTel();
			System.out.println(msg);
		}
		session.getTransaction().commit(); 
0

Chyba nie dodałes disjancitonow do criteria

0

ooo cholera faktycznie, ale problem dalej pozostaje

0

"Restrictions.gt("EmpFirstName",Fname);" szukasz autorów z imionami które są dalej w alfabecie niż podane ?

0

A możesz jaśniej?

0

Zakładam że chcesz znaleźć ludzi o takim imieniu jak Fname lub nazwisku jak Lnam. Ale zamiast porównania robisz EmpFirstName > Fname.

0

Podaje jakies imie/nazwisko w JTextField konwertuje na stringa i porównuje do EmpFirstName/LastName w bazie bynajmniej tak jest to opisane w podręczniku...
Jak mam to rozwiązać?
Jeśli dam Criterion namef = (Restrictions.eq("EmpFirstName",Fname));
Criterion namel = (Restrictions.eq("EmpLasttName",Lname));
to zadziala mi tylko dla imienia a ja mam jeszcze pare inny parametrów które muszą zostać wyświetlone jeśli ktoś zaznaczy/poda tylko ten parametr to ma wyświetlić wszystkie dane które ten parametr spełniają a jeśli ktoś poda kilka kryteriów to ma zawęzić mi listę wyników

 		find.addActionListener(new ActionListener(){
				public void actionPerformed(ActionEvent event){
					findbutton(fname,lname,tel,age,dep,worker);
				}


		});
	
	}
	private void findbutton(JTextField fname, JTextField lname, JTextField tel, JTextField age, JComboBox dep, JComboBox worker) {
		String Fname = fname.getText();
		String Lname = lname.getText();
		Session session = HibernateConfig.getSessionFactory().getCurrentSession();
		session.beginTransaction();
	
		Criteria crit = session.createCriteria(HibernateData.class);
		Criterion namef = Restrictions.eq("EmpFirstName",Fname);
		Criterion namel = Restrictions.eq("EmpLastName",Lname);
		Disjunction disjunction = Restrictions.disjunction();
		
		disjunction.add(namef);
		disjunction.add(namel);
		crit.add(conjunction);

		List results = crit.list();
		
		Iterator iter = results.iterator();
		
		if (!iter.hasNext()) {
			System.out.println("Nie ma takiego osobnika");
			return;
		}
		while (iter.hasNext()) {
			HibernateData data = (HibernateData) iter.next();
			String msg = data.getEmpFirstName() + "\t";
			msg += data.getEmpLastName() + "\t";
			msg += data.getEmpDep() + "\t";
			msg += data.getEmpTel();
			System.out.println(msg);
		}
		session.getTransaction().commit();
		
	}

gdy wpisze imie zwraca mi wszystko ladnie -imiona gdy podam nazwisko nie zwraca mi nic ;s nie mówiąc już jak bym podal imie i nazwisko PLZ HELP! :]

0

Jak ma działać jako zawężanie wyników : podasz imie pokazuje z danym imieniem , dodasz do tego nazwisko to znajduje z takim imieniem i nazwiskiem to zamiast Disjunction po prostu pododawaj do criteria (criteria.add(namef); criteria.add(namel)); poza tym zmiast używać eq użyj ilikie będzie wygodniej dla szukającego, a co do niedziałającego wyszukiwania po nazwisku to masz błąd - dodaj do citeria tylko namel i potestuj - może coś z danymi w bazie ?

0

Problem z nazwiskiem rozwiązany wiem jak wyszukać elementy pojedynczo i razem ale na if'ach a jak to zrobić inaczej?
Ponieważ mam 6 rożnych wariantów z czego 2 maja w sobie kolejno 2 warianty i 5 wariantów (comboboxy = worker, dep) muszę stworzyć funkcje która wyszuka mi w bazie coś takiego:
SELECT * FROM xxx(nazwa bazy) WHERE par = :par1 OR par2 = :par2 OR par3 = :par3 ... itd.
i zarazem jeśli ktoś poda mi par1 i par2 czy tam par1, par3 i par4 to ma zawęzić wyszukiwanie do tych 2/3/4 wariantów + te 2 comboboxy --> dep, worker
Na ifach wyjdzie straszny nadmiar kodu podejrzewam że jest dużo prostsze rozwiązanie...

Domyślam się że może być ciężko z wyobrażeniem dołączam obrazek do załącznika
->Jak widać jest kilka wariantów ktoś mi podaje np imię i nr telefonu to ma mi zwrócić imię + tel +worker +dep nawet jeśli tych 2 ostatnich nie zmieniał bo są na domyślnym ustawione.

Z góry dziękuję za odpowiedz!
PS Może Wibowit albo Koziolek poczytają tego posta to mi pocisną ale przynajmniej podadzą jakieś konkrety ;p

0

Rozwiązałem problem ^^

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