Sprawdzenie duplikatów

0

Do bazy po przez encje będę zapisywał dane w zależności od wyboru para rekordA i rekordC albo rekordB i rekordC ale mam zrobić walidację między innymi czy te dane się nie duplikują w bazie. Stworzyłem osobną klasę gdzie mam metodę Walidacji w niej stworzyłem już kilka walidacji jakie miałem ale nie wiem jak poradzić sobie z tą która ma sprawdzać czy się nie duplikuje. Nie wiem czy napisałem to wystarczająco jasno:)

Przykład klasy walidacji:


/**
 * 
 * @ver
 * @rev $Rev$ $LastChangedDate$
 */

public class ItValidator {

	public static boolean addValidator(final List<IEntity> ite) {

		final IEntity vali = new IEntity();

		if ((vali.getCCategory() != null) && (vali.getOCategory() != null)) {

			return false;

		}

		return true;
	}
}
0

A nie wystarczy odpowiednie ograniczenia w bazie zrobić?

0

No własnie nie. Musze zrobić to w kodzie. Może jakoś przez pętle forech albo iterator ?

Jak mogę doprowadzić to do końca żeby było ok?

public static Set<Long> checkFieldsUnique(final List<IEntity> ite) {

		for (final IEntity e : ite) {
			if (checkOrderOrCase(e)) {
				 e.getId();
			}
			
			

		}
	}

	/**
	 * @param ite
	 *            the ite
	 * @return 
	 */
	public static boolean checkOrderOrCase(final IEntity ite) {

		return (ite.getCaseCategory() != null) && (ite.getOrderCategory() != null) ? true : false;
	}
}
0

Jeszcze raz.

  1. Do bazy wstawiasz parę wartości (A,B) albo (B,C), gdzie A, B i C reprezentują różne obiekty
  2. Chcesz uniknąć sytuacji gdzie do bazy wstawisz powtarzającą się parę np. (a1,c1), (a2,c1) i (a1,c1).
  3. Chcesz to zrobić po stronie javy, tak?

Ok. To po pierwsze co jeżeli w bazie już istnieje jakaś para, która jest w kolekcji? Trzeba by odpytać bazę (choć zakładam, że to bardzo pesymistyczny przypadek).
Po drugie szukamy duplikatów > http://stackoverflow.com/questions/8108179/finding-duplicates-in-a-collection
Po trzecie wyjątek czy usuniecie z kolekcji? IMO, lepiej to drugie, chyba, że duplikacja wartości jest błędem.

0

W jakim kontekście o to pytasz? JSF, PrimeFaces, JDBC, Hibernate, czy moja-baza-w-jakims-pliku?

Bezkontekstowo to można zrobić tak:

  1. Przed zapisem odczytaj rekord wg klucza który ma się nie duplikować (np. Imie i Nazwisko)
  2. Jeśli się znajdzie to masz duplikat
  3. Jeśli nie to ... zapisujesz?
0

Koziołek-> mam wartości np IMIE, PESEL albo NAZWISKO, PESEL i w momencie wstawiania przeszukuje mi tabeli albo po dwóch kolumnach czy taka para się nie powtarza. Po stronie Javy i usunąć z kolekcji

Vpiotr-> Hibernate ,EBJ. I potrzebuje sprawdzić parę kluczy np. IMIE, PESEL albo NAZWISKO, PESEL

1

Tu masz rozwiązania:
http://stackoverflow.com/questions/4613055/hibernate-unique-key-validation

Ale generalnie nic mądrego - po prostu:

  • dodaj walidację po stronie bazy (i w warstwie modelu - @Column(unique=true) lub @NaturalId)
  • przed zapisem sprawdź czy są duplikaty (w walidatorze) - jeśli nie chcesz parsować błędu

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