66import java .lang .reflect .Field ;
77import java .lang .reflect .InvocationTargetException ;
88import java .lang .reflect .Method ;
9+ import java .security .InvalidParameterException ;
910import java .util .ArrayList ;
1011import java .util .HashMap ;
1112import java .util .List ;
@@ -165,26 +166,40 @@ public <T extends Model> Query<T> belongsTo(Class<T> parent) {
165166 }
166167
167168 public <T extends Model > Query <T > belongsTo (Class <T > parent , String fieldName ) {
169+ return belongsTo (parent , fieldName , Repo .get (parent ).getInfo ().getIdField ());
170+ }
171+
172+ public <T extends Model > Query <T > belongsTo (Class <T > parent , String fieldName , String otherFieldName ) {
168173 try {
169174 Object id = Repo .get (getClass ()).getInfo ().getField (fieldName ).get (this );
170- return Repo .get (parent ).whereId ( id );
175+ return Repo .get (parent ).where ( otherFieldName , id );
171176 } catch (IllegalAccessException e ) {
172177 throw new RuntimeException (e );
173178 }
174179 }
175180
181+ public <T extends Model > void assignTo (T value ) {
182+ if (value == null )
183+ throw new InvalidParameterException ("You need to specify a parent type if the value is null" );
184+ assignTo ((Class <T >) value .getClass (), value );
185+ }
186+
176187 public <T extends Model > void assignTo (Class <T > parent , T value ) {
177188 assignTo (parent , value , Repo .get (parent ).getInfo ().getRelationField ());
178189 }
179190
180191 public <T extends Model > void assignTo (Class <T > parent , T value , String fieldName ) {
192+ assignTo (parent , value , fieldName , Repo .get (parent ).getInfo ().getIdField ());
193+ }
194+
195+ public <T extends Model > void assignTo (Class <T > parent , T value , String fieldName , String otherFieldName ) {
181196 try {
182197 Field f = Repo .get (getClass ()).getInfo ().getField (fieldName );
183198 if (value == null ) {
184199 f .set (this , null );
185200 } else {
186201 Repo <T > repo = Repo .get (parent );
187- Object id = repo .getInfo ().getField (repo . getInfo (). getIdField () ).get (value );
202+ Object id = repo .getInfo ().getField (otherFieldName ).get (value );
188203 f .set (this , id );
189204 }
190205 } catch (IllegalAccessException e ) {
@@ -197,9 +212,13 @@ public <T extends Model> Query<T> hasMany(Class<T> child) {
197212 }
198213
199214 public <T extends Model > Query <T > hasMany (Class <T > child , String fieldName ) {
215+ return hasMany (child , fieldName , Repo .get (getClass ()).getInfo ().getIdField ());
216+ }
217+
218+ public <T extends Model > Query <T > hasMany (Class <T > child , String fieldName , String ownFieldName ) {
200219 try {
201220 Repo <?> ownRepo = Repo .get (getClass ());
202- Object id = ownRepo .getInfo ().getField (ownRepo . getInfo (). getIdField () ).get (this );
221+ Object id = ownRepo .getInfo ().getField (ownFieldName ).get (this );
203222 return Repo .get (child ).where (fieldName , id );
204223 } catch (IllegalAccessException e ) {
205224 throw new RuntimeException (e );
@@ -234,17 +253,4 @@ public <T extends Model, P extends Model> Query<T> belongsToMany(Class<T> other,
234253 }
235254 }
236255
237- public void setMorph (String name , Class <? extends Model > type , Object id ) {
238- TableInfo info = Repo .get (getClass ()).getInfo ();
239- try {
240- info .getField (name + "Id" ).set (this , id );
241- info .getField (name + "Type" ).set (this , Repo .get (type ).getInfo ().getMorphType ());
242- } catch (IllegalAccessException ignored ) {
243- }
244- }
245-
246- public void setMorph (String name , Model model ) {
247- setMorph (name , model .getClass (), Repo .get (model .getClass ()).getId (model ));
248- }
249-
250256}
0 commit comments