Slick의 해제 된 Embedding을 사용하여 AbstractTable을 확장하는 클래스를 정의하고 일부 기본 키가 여러 열을 스패닝합니다. 예를 들어 코드에TableElementType 튜플의 PrimaryKey 투영을 얻는 방법은 무엇입니까?
class Foo extends AbstractTable[(some, tuple, type)](tag, name)
{
def col1 = ...
def col2 = ...
def col3 = ...
def * = (col1, col2, col3)
def pk = primaryKey(name, (col1, col2))
...
}
어딘가에, 내가 그 기본 키에 해당하는 기본 키 참조를 보유 (문제의 코드는 일반과 특정 테이블과 열이 정의되어있는 지식에 의존해서는 안됩니다) . 또한 * 투영에 정의 된대로이 테이블의 행에 해당하는 TableElementType 튜플에 대한 참조를 보유합니다.
프로그래밍 방식으로 해당 요소의 기본 키 투영을 얻으려면 어떻게해야합니까? 즉, PrimaryKey 및 TableElementType 참조가 인수로 주어진다면이 예제에서 (val1, val2, val3) TableElementType 튜플에서 (val1, val2) 튜플을 가져와야합니다. 나는 Slick 문서에서 쉽게 달성 할 수있는 방법을 찾지 못했습니다.
감사합니다. 그러나 이것은 내가 요구 한 것이 아닙니다. 나는 심지어 구체적인 테이블을위한 클래스를 작성하기도하지 않았다. 일반적인 데이터 액세스 레이어를 작성 중이며 기본 키 투영을 얻는 일반적인 방법에 관심이 있습니다. 기본 클래스에 PrimaryKey 및 T # TableElementType이라는 두 개의 인수를 사용하는 메서드와 같은 것이 있으며 기본 키에 포함 된 열에 대해서만 지정된 요소 값의 튜플을 반환합니다. – silverberry
당신이 무엇을 요구하는지는 쉽게 구현할 수 없습니다. 왜냐하면 터플 길이가 인코딩되어 있기 때문입니다 (예 :'Tuple2','Tuple3' 등). 당신이 할 수있는 일은 테이블 객체를 정의하고 반복자에서 기본 키를 얻는 것입니다 : 'TableQuery [Foo] .baseTableRow.primaryKeys', form here 여기 튜플로 돌연변이를 만드는 법을 설명 할 수는 없지만, 아마도 엉성한 것은 관련이 있습니다.하지만 저는 라이브러리 전문가가 아닙니다. –
OK, 알겠습니다. 물론 기본 키를 반복합니다. 더 간단한 질문은 어떻습니까? 말하자면, T # TableElementType 요소와 Column [V] 열이 있습니다. 해당 요소에 대해 프로그래밍 방식으로 해당 열의 값을 얻으려면 어떻게해야합니까? – silverberry