Member 12947047 Ответов: 0

Как получить поля и значения с помощью отражения


Это две таблицы 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);

0 Ответов