2016-02-29 4 views
1

Я никогда не видел эту форму полезной для меня. Я бы хотел, чтобы это было сейчас.Композитный первичный ключ в REST Spring Boot

В моей весенней загрузке Моя база данных имеет два первичных ключей

ТрансИд и PrsnRef

Теперь, когда я создаю мой таблицы базы данных с именем PersonCore Я получаю 2 класса субъекта

PersonCore (Как известно, у этого есть вся остальная информация)

/** 
* The persistent class for the PERSON_CORE database table. 
* 
*/ 
@Entity 
@Table(name="PERSON_CORE") 
@NamedQuery(name="PersonCore.findAll", query="SELECT f FROM PersonCore f") 
public class PersonCore implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @EmbeddedId 
    private PersonCorePK id; 

    @Column(name="PRSN_AGE") 
    private BigDecimal prsnAge; 

    @Column(name="PRSN_AMER_INDIAN_ALASKA_NTV") 
    private String prsnAmerIndianAlaskaNtv; 

    @Column(name="PRSN_DOB") 
    private String prsnDob; 

PersonCorePK (Это имеет два ТрансИд и personref идентификаторам)

/** 
* The primary key class for the PERSON_CORE database table. 
* 
*/ 
@Embeddable 
public class PersonCorePK implements Serializable { 
    //default serial version id, required for serializable classes. 
    private static final long serialVersionUID = 1L; 

    @Column(name="TRANS_ID") 
    private String transId; 

    @Column(name="PRSN_REF") 
    private String prsnRef; 

    public FdshPersonCorePK() { 
    } 
    public String getTransId() { 
     return this.transId; 
    } 
    public void setTransId(String transId) { 
     this.transId = transId; 
    } 
    public String getPrsnRef() { 
     return this.prsnRef; 
    } 
    public void setPrsnRef(String prsnRef) { 
     this.prsnRef = prsnRef; 
    } 

Я пытаюсь создать RESTful-сервис при помощи пружинного загрузки Я создал репозиторий с @RepositoryRestResource (бла-бла-бла)

@RepositoryRestResource(path = "person", collectionResourceRel = "FdshPersonHDR") 
public interface PersonCoreRepository extends PagingAndSortingRepository<PersonCore, PersonCorePK> { 
    Collection<PersonCore > findAll(); 
    Collection<PersonCore > findAllByIdTransIdAndIdPrsnRef(@Param("transid")String transId, @Param("prsnRef") String prsnRef); 
} 

Весенний ботинок такой замечательный, что он заботится обо мне. Давайте посмотрим ...

Когда я пытаюсь извлечь все записи из базы данных его все хорошо, за исключением конечного звена что-то вроде этого

http://localhost:8080/person/[email protected]

Это сводит меня с ума. Я знаю, что читаю то, что хочу, но не показываю, что именно мне нужно. Я хочу помочь выяснить, как я могу преобразовать этот «[email protected]». Он должен фактически отображать транзит этой записи.

И, пожалуйста, дайте мне знать, если мы все же можем добавить эти два составных ключа в этот формат o/p, потому что я получаю все данные, которые я хочу, кроме тех двух, которые для меня важны. Я не уверен, что могу использовать два @ Id в одной Entity. Но я проверю его.

Sample Screenshot

+0

Вы имеете в виду «Я хотел бы разумное переопределение метода toString() в классе PersonCorePK»? – duffymo

+0

Спасибо за быстрый ответ. Sir. Ничего о классах. Я пытаюсь выяснить, есть ли способ показать, что «[email protected]» как transID –

+0

У меня есть общее решение в этом http://stackoverflow.com/questions/43763250/spring-data-rest-with-composite-primary-key/43832551#43832551&hl=ru ссылка на ссылку здесь] (http://stackoverflow.com/questions/43763250/spring- data-rest-with-composite-primary-key/43832551 # 43832551) – kidfruit

ответ

2

Что у вас есть выход из toString() вызова на PersonCorePK объекта. Если вы хотите изменить способ представления этого объекта как String, вам необходимо переопределить метод toString() для класса PersonCorePK. Что-то вроде этого:

EDIT: новый метод toString().

@Override 
public String toString() { 
    return "/search/findAllByIdTransIdAndIdPrsnRef?transId="+transId+"&prsnRef="+prsnRef; 
} 

Я попробовал, что он работал для меня. Замедлитесь и убедитесь, что вы понимаете, что происходит. Также обратите внимание, что я изменил (@Param("transid") на (@Param("transId") с прописным номером I.

Кроме того, я добавил конструктор для PersonCorePK:

public PersonCorePK(String transId, String prsnRef) { 
    this.transId = transId; 
    this.prsnRef = prsnRef; 
} 

Наконец, когда я тестировал приложение, я удостоверился, чтобы поставить Content-Type из application/json в POST запроса, так что система понимает данные, что является получение.

Я использовал Accessing JPA Data with REST в качестве руководства.

+0

I Переопределить транзитную строку. Но когда я пытаюсь перенаправить с помощью этой ссылки, я получаю эту ошибку .. "org.springframework.core.convert.ConverterNotFoundException: конвертер не найден, способный преобразовываться из типа [java.lang.String], чтобы напечатать [com..Methods. PersonCorePK] " –

+0

Пожалуйста, работайте над своей грамматикой. Смотрите правки в answser. Метод toString входит в класс PersonCorePK, как описано. –

+0

Это так здорово. Ты мой герой Николас ... :) Извини за мою бедную грамматику. –

Смежные вопросы