检查实体是否包含主键

Checking whether entity contains primary key or not

我想检查我的实体是否包含主键或复合键。如果实体包含主键,则使 isPrimaryKey 为真并在键字符串中输入主键的值,否则为假,反之亦然。

这是我想要的示例 JSON return:

{
  "data": {
    "identifier": {
      "primaryKeys": {
        "isPrimary": false,
        "keys": ""
      },
      "compositeKeys": {
        "isComposite": true,
        "keys": "compositeKey"
      }
    },
    "rows": [],
    "columns": [
      {
        "createTimeStamp": "2020-09-30T19:00:00.000-05:00",
        "createUserId": "SHOKUMA",
        "lastUpdateTimeStamp": "2020-09-30T19:00:00.000-05:00",
        "lastUpdateUserId": "SHOKUMA",
        "key": {
          "xyz": "DLRHOLD",
          "abc": "010",
          "cde": "LSE",
          "date": "2020-01-01"
        },
        "dteExpn": "01/01/2025",
        "indActive": "Y"
      }
    ]
  }
}

我为此创建了一些 pojo:

public class PrimaryKeys{
    public boolean isPrimary;
    public String keys;
}

public class CompositeKeys{
    public boolean isComposite;
    public String keys;
}

public class Identifier{
    public PrimaryKeys primaryKeys;
    public CompositeKeys compositeKeys;
}

public class Key{
    public String xyz;
    public String abc;
    public String cde;
    public String date;
}

public class Column{
    public Date createTimeStamp;
    public String createUserId;
    public Date lastUpdateTimeStamp;
    public String lastUpdateUserId;
    public Key key;
    public String dteExpn;
    public String indActive;
}

public class Data{
    public Identifier identifier;
    public List<Object> rows;
    public List<Column> columns;
}

public class Root{
    public Data data;
}
public boolean hasPrimary() {
    return Arrays.stream(this.getClass().getDeclaredFields())
            .anyMatch(field -> field.isAnnotationPresent(Id.class));
}

public boolean hasComposite() {
    return Arrays.stream(this.getClass().getDeclaredFields())
            .anyMatch(field -> field.isAnnotationPresent(EmbeddedId.class));
}

@JsonIgnore
public String getKey() {
    return hasPrimary()
            ? Arrays.stream(this.getClass().getDeclaredFields())
                    .filter(field -> field.isAnnotationPresent(Id.class)).findFirst().get().getName()
            : Arrays.stream(this.getClass().getDeclaredFields())
                    .filter(field -> field.isAnnotationPresent(EmbeddedId.class)).findFirst().get().getName();
}