2013-04-25 4 views
0

Squeryl을 사용하여 항목이 아직없는 경우 어떻게 삽입합니까?Squeryl : 삽입하지 않으면 삽입 하시겠습니까?

삽입 문이 이미 존재하는 튜플에서 실행되었지만 작동하지 않는 경우 (PSQLException이 캐치되지 않음) PSQLException을 잡으려고했습니다. 사실 Squeryl에게 이미 존재하는 튜플을 삽입하지 말라고 말하는 것이 좋습니다. 그것이 제가 찾고있는 것입니다.

답변

0

DB에 동일한 튜플이 존재하지 않거나 squeryl 만 삽입하지 않겠습니까?

첫 번째 경우에는 해당 튜플에 고유 제한 조건을 추가하기 만하면됩니다. 예 :

on(myTable)(e => declare(
    columns(e.name, e.year) are (indexed("myIndex"), unique) 
)) 

이 코드는 val myTable = table[MyTable]과 같은 테이블 정의 부근에 배치해야합니다. 이 튜플에 인덱스를 추가했다면 원하는 경우이 코드를 삭제할 수 있습니다.

+0

첫 번째는 데이터베이스에서 처리합니다. 하나의 튜플이 두 번 이상 존재하는 것을 허용하지 않습니다. 그래서 그것은 내가 원하는 것이 아닙니다. 사실 난 예외를 throw하여 어쨌든 데이터베이스에 의해 거부 될 불필요한 삽입을 피하기 위해 Squeryl이 필요합니다 (이는 throw 된 PSQLException의 경우 catchabale이 아닙니다) – ideaboxer

2

불행히도 Postgres를 사용하는 경우 예외가 발생하면 처리를 계속할 수 없습니다. https://groups.google.com/forum/?fromgroups=#!topic/squeryl/zaflXRra0qg

당신이 찾고있는 것을 원한다면, 먼저 선택한 것을 발행하여 이미 존재하는 ids을 찾고 찾고있는 항목에서 그들을 제거하고 싶을 것입니다. 끼워 넣다.

+0

선택 작업을 수행하고 원자 연산에 삽입 할 수 있습니까? – ideaboxer

+1

기본적으로 생각할 수는 없지만 트랜잭션을 시작한 다음 원시 jdbc 세션을 잡고 테이블 잠금을 실행 한 다음 명령을 실행할 수 있습니다. 매우 효율적이지는 않지만 원자적일 것입니다. – jcern

+0

감사합니다. 이건 정말 복잡해 보입니다 ... – ideaboxer

관련 문제