REST Spring Boot中的复合主键用法

时间:2016-02-29 20:09:55

标签: java spring rest spring-boot

我从未见过这种形式对我有帮助。我希望现在能够。

在我的spring-boot中,我的数据库有两个主键

  

TransId和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(这有两个Id的transid和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;
    }

我正在尝试使用spring-boot创建RESTFul服务 我使用@RepositoryRestResource(bla bla bla)

创建了存储库
@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/com.----.Application.Methods.PersonCorePK@83e14116

这让我发疯了。我知道它在阅读我想要的内容,但却没有向我展示我需要的东西。我想帮助弄清楚如何转换“com.----.Application.Methods.PersonCorePK@83e14116”。它实际上应该显示该记录的transid。

请告诉我,无论如何我们都可以将这两个复合键添加到那个o / p格式中,因为我得到了我想要的所有数据,除了那两个对我来说很重要的数据。我不确定我可以在单个实体中使用两个@Id。但我会检查它。

Sample Screenshot

1 个答案:

答案 0 :(得分:2)

您拥有的是toString()对象PersonCorePK调用的输出。如果要更改此对象表示为String的方式,则需要覆盖PersonCorePK类的toString()方法。像这样:

编辑:新的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作为指南。