Как получить поля и значения с помощью отражения
Это две таблицы CompositeDTO,CompositeKeyDTO.
Используя отражение, я хочу сохранить его в базе данных.
Структура базы данных такова:
CREATE TABLE public.test_jdbc_composite ( id uuid NOT NULL, num character varying(50) NOT NULL, title character varying(150), date_add timestamp without time zone, date_update timestamp without time zone, CONSTRAINT test_jdbc_composite_pkey PRIMARY KEY (id, num) )Это дает ошибку, потому что id, num принадлежат CompositeKeyDTO, и у нас есть класс сущностей CompositeDTO.
Мне нужны как поля, так и значения, чтобы я мог сохранить их в базе данных.
Что я уже пробовал:
@Getter @Setter @Table(name="test_jdbc_composite") public class CompositeDTO extends GenericDTO<compositekeydto> { /** * */ private static final long serialVersionUID = -6200885628682542590L; @Key private CompositeKeyDTO key; @Column private String title; } @Getter @Setter @Table(name="test_jdbc_composite") public class CompositeKeyDTO implements KeyDTO { /** * */ private static final long serialVersionUID = -4414037231838241192L; @Column private UUID id; @Column private String num; public UUID getId() { return id; } public void setId(UUID id) { this.id = id; } public String getNum() { return num; } public void setNum(String num) { this.num = num; } }Я получаю все поля, используя это отражение:
private static void getClassFields(final Class c, final LinkedList<field> fields) { for (Field f : c.getDeclaredFields()) { if (Modifier.isStatic(f.getModifiers())) { continue; } if (f.getType().getName().contains("lc.stark.frw.persistence.jdbc")) { try { getClassFields(Class.forName(f.getType().getName()), fields); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { fields.add(f); } } } Field[] field = DynamicFieldUtilsJdbc.getClassFields( Class c, LinkedList<field> fields)); Object value; for (int i = 0; i < field.length; i++) { field[i] = "get" + field[i] .substring(0, 1).toUpperCase() + field[i] .substring(1); Object value = null; Method m = entity.getClass().getMethod(field[i] , null); value = m.invoke(entity);