我必須創建一個具有某些給定屬性的實體的新記錄。如何處理JOOQ中的外鍵關係
更像是應對現有記錄,其中一些值被替換爲JOOQ
。我可以爲單個表格做到這一點,但我正在爲相關實體找到正確的方法。
例如:主表是學生,我需要10年級學生的新記錄。我可以讀取10年級學生的記錄並更改名稱並保存。
Result<Record> result= context.select().from(Student.STUDENT).where(Student.STUDENT.GRADE.eq(studRecords.getGrade()))
.fetch();
StudentRecord appER=(StudentRecord) result.get(0);
Field<?>[] fields= Student.STUDENT.fields();
for (Field<?> field : fields)
{
//System.out.println(field.getName() + " = " +field.getType() + field.getDataType() + " " + field.getBinding());
DataType<Comparable> dt= (DataType<Comparable>) field.getDataType() ;
//if(!dt.getSQLDataType().nullable() && !dt.getSQLDataType().defaulted() && studRecords.getValue(field) ==null)
if(studRecords.getValue(field) ==null)
{
if(studRecords.getTable().getPrimaryKey().getFields().contains(field)){
System.out.println("Primary key is null . New Record Adding");
continue;
}
if(t.getTable().getReferences().contains(field))
System.out.println("Foreign key");
Object obj=appER.getValue(field);
if(field.getType().equals(Integer.class))
{
studRecords.setValue((Field<Comparable>)field,(obj!=null?(Integer)obj :new Integer(0)));
}
if(field.getType().equals(Boolean.class)){
studRecords.setValue((Field<Comparable>)field,(obj!=null?(Boolean)obj :new Boolean(false)));
}
if(field.getType().equals(Byte.class)){
studRecords.setValue((Field<Comparable>)field,(obj!=null?(Byte)obj :new Byte((byte) 0)));
}
if(field.getType().getName().equals("java.lang.String")){
studRecords.setValue((Field<Comparable>)field,(obj!=null?(String)obj :new String("")));
}
if(field.getType().equals(Double.class)){
studRecords.setValue((Field<Comparable>)field,(obj!=null?(Double)obj :new Double(0.0)));
}
if(field.getType().equals(Long.class)){
studRecords.setValue((Field<Comparable>)field,(obj!=null?(Long)obj :new Long(0)));
}
}
}
但是現在我也想創建相關對象,如地址,愛好等相關表。
什麼是最好的方法來做到這一點?
感謝您的及時回覆@Brent Douglas。我試圖實現這一點,工作得很好。但我的問題是,是否有辦法瞭解外鍵在JOOQ中的給定表中引用的表類型。就像我們在Hibernate中有相關的字段映射到參考表並使用Hibernate.initialise()加載的那樣? – msood
@msood如果確實如此,我會很驚訝。我認爲jOOQ的重點在於它更像直接使用java,而不是完整的ORM。就個人而言,我認爲外鍵總是應該以
相關問題