JSP: NumberFormatException при объединении 2 объектов - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь создать пользовательские запросы в спящем режиме и сейчас использую внутреннее соединение.

Это мой код: Репозиторий филиалов:

@Query("select b from Branch b inner join User u ON b.branch_manager = u.id")
List<Branch> findAllBranchInfo();

Служба ветвления:

public List<Branch> getAllBranchInfo();

Impl Служба ветвления:

@Override
public List<Branch> getAllBranchInfo() {
    return (List<Branch>) branchRepository.findAllBranchInfo();
}

Контроллер филиала:

@RequestMapping(value="/BranchTest", method=RequestMethod.GET)
public ModelAndView testBranch() {
    ModelAndView model = new ModelAndView("test_branch");
    List<Branch> branchList = branchService.getAllBranchInfo();
    model.addObject("branchList",branchList);
    return model;
}

Модель ветки:

@Entity
@Table(name="branch")
public class Branch {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long branch_id;

@Column(name="branch_name")
private String branch_name;

@Column(name="branch_manager")
private long branch_manager;

public long getBranch_id() {
    return branch_id;
}

public void setBranch_id(long branch_id) {
    this.branch_id = branch_id;
}

public String getBranch_name() {
    return branch_name;
}

public void setBranch_name(String branch_name) {
    this.branch_name = branch_name;
}

public long getBranch_manager() {
    return branch_manager;
}

public void setBranch_manager(long branch_manager) {
    this.branch_manager = branch_manager;
}

@OneToMany(targetEntity=User.class, mappedBy="branch",cascade=CascadeType.ALL, fetch = FetchType.LAZY)
private List<User> user;

public List<User> getUser() {
    return user;
}

public void setUser(List<User> user) {
    this.user = user;
}


}

И сейчас она выдаёт мне эту ошибку:

Hibernate: select branch0_.branch_id as branch_i1_0_, branch0_.branch_manager as branch_m2_0_, branch0_.branch_name as branch_n3_0_ from branch branch0_ inner join user user1_ on (branch0_.branch_manager=user1_.id)
2018-09-25 07:46:04.544 ERROR 1708 --- [nio-8080-exec-1] o.a.c.c.C.[.[localhost].[/].[jsp]        : Servlet.service() for servlet [jsp] threw exception

java.lang.NumberFormatException: For input string: "first_name"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.8.0_181]
at java.lang.Integer.parseInt(Integer.java:580) ~[na:1.8.0_181]
at java.lang.Integer.parseInt(Integer.java:615) ~[na:1.8.0_181]

Я не могу найти ее нигде, где я объявилэто как целое число.

Это мой jsp:

<c:forEach items="${branchList }" var="branch">
    <tr>
        <td>${branch.branch_name}</td>
        <td>${branch.user.first_name}</td>
    </tr>
</c:forEach>

Каждый раз, когда я помещаю "$ {branch.user.branch_id}", это выдает мне ошибку.Пожалуйста, помогите мне.Большое вам спасибо!

Ответы [ 3 ]

0 голосов
/ 25 сентября 2018

На мой взгляд, если вы хотите делать такие вещи в вашем jsp, вы должны сделать что-то подобное в вашей модели "Branch" и вашей модели "User", я полагаю?

...
@JoinColumn(name = "branch_manager", referencedColumnName = "branch_manager")
@OneToOne(cascade = CascadeType.ALL, mappedBy = "User", fetch = FetchType.LAZY)
private User branch_manager;
...

И аналогично вашей "Пользовательской" модели
Затем в свой "Репозиторий филиалов" добавьте JpaRepository, и я думаю, что вам даже не нужно использовать этот метод, просто используйтеметод findAll от вашего "контроллера филиала".И все должно быть в порядке!

Надеюсь, это будет полезно, в противном случае я не понял вашего вопроса:)

0 голосов
/ 25 сентября 2018

Проблема в том, что в одной ветке много пользователей.branch.user относится к списку пользователей, а не к одному пользователю.Вы должны выполнить итерацию, чтобы получить для каждого пользователя его / ее имя.

1. Переименуйте запутанный метод getUser() в getUsers(), чтобы лучше выделить отношение один ко многим.

2.Это попытка исправить ваш JSP:

<c:forEach items="${branchList }" var="branch">
    <tr>
        <td>${branch.branch_name}</td>
        <c:forEach items="${branch.users}" var="user">
            <td>${user.first_name}</td>
        </c:forEach>         
    </tr>
</c:forEach>

Я предполагаю, что {users.<n>}, где <n> - целое число, относится к n -ому элементу списка пользователей.Вот почему процессор JSP пытается преобразовать first_name в целое число, когда у вас есть выражение, подобное {users.first_name}

0 голосов
/ 25 сентября 2018

Рекомендуемый стандартный подход - изменить long на Long.См. jpa-entity-id-long-or-long , чтобы узнать почему?

и проверьте существующие значения базы данных для соответствующих полей вместе с их типом.

Есливышеуказанные вещи не решают проблему, а затем удаляют базу данных и иногда создают ее с самого начала из-за несовместимых данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...