У меня была эта проблема, но я не хотел использовать аннотацию в своих сущностях, поэтому я решил, создав конструктор для моего класса, этот конструктор не должен ссылаться на сущности, которые ссылаются на эту сущность. Скажем, этот сценарий.
public class A{
private int id;
private String code;
private String name;
private List<B> bs;
}
public class B{
private int id;
private String code;
private String name;
private A a;
}
Если вы попытаетесь отправить в представление класс B
или A
с @ResponseBody
, это может вызвать бесконечный цикл. Вы можете написать конструктор в своем классе и создать запрос с вашим entityManager
следующим образом.
"select new A(id, code, name) from A"
Это класс с конструктором.
public class A{
private int id;
private String code;
private String name;
private List<B> bs;
public A(){
}
public A(int id, String code, String name){
this.id = id;
this.code = code;
this.name = name;
}
}
Однако, есть некоторые сужения об этом решении, как вы можете видеть, в конструкторе я не ссылался на List bs, потому что Hibernate не разрешает его, по крайней мере, в версии 3.6.10.Final, поэтому, когда мне нужно показать оба объекта в представлении я делаю следующее.
public A getAById(int id); //THE A id
public List<B> getBsByAId(int idA); //the A id.
Другая проблема с этим решением состоит в том, что если вы добавляете или удаляете свойство, вы должны обновить свой конструктор и все ваши запросы.
Вы можете добавить оператор, который проверяет числовой тип:
summer<-function(func,df,col.name){
x<-df
mynames<-names(df)
col.name1<-which(mynames==col.name)
x<-func(df[col.name1])
x
}
summer (sum, iris, "Sepal.Width")
summer(sum,iris,"Sepal.Width")
[1] 458.6
Получить сумму по column_name. Вы можете получить доступ к данным столбца с помощью индекса (нет необходимости использовать имя столбца, я бы предпочел это) или имя столбца. Следующий код предоставляет сумму по столбцу 2, то есть "Sepal.Width"
для набора данных iris
.
test = function(func,data=iris,x){
func(data[,x]) # Can access data using column index or name
}
test(sum,x=2) or test(sum,x="Sepal.Width")
Выход:
[1] 458.6
Не то, чтобы это было много смысла суммировать по одному элементу, вот код, который выполняется без ошибок:
test = function(func,data="file3",column_name,x=1){
func(get(data)[[column_name]][x])
}
file3 <- iris
test(func = sum, column_name = "Sepal.Length")
[1] 5.1