Skip to content

Commit 39bc710

Browse files
committed
Added a way to provide both field names for relations
1 parent 0b3d1cc commit 39bc710

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

src/main/java/org/javawebstack/orm/Model.java

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.lang.reflect.Field;
77
import java.lang.reflect.InvocationTargetException;
88
import java.lang.reflect.Method;
9+
import java.security.InvalidParameterException;
910
import java.util.ArrayList;
1011
import java.util.HashMap;
1112
import 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

Comments
 (0)