Spring -boot

#java #hibernate #spring-boot

#java #переход в спящий режим #spring-boot

Вопрос:

Может кто-нибудь сказать мне, почему мой код не может найти идентификатор для каждого пользователя? Мой код создает новую строку в SQL каждый раз, когда я обновляю уже введенную информацию о персонаже, потому что он не находит идентификатор. Я использую более старую версию Spring-Boot, и я знаю, что в более новых версиях findById стал необязательным … это вызывает проблему в моей старой версии?

Вот мой код репозитория:

 @Transactional
public interface BrokerRepository extends CrudRepository<Broker,Long>, JpaSpecificationExecutor {

    Broker save(Broker entity);

    Broker findById(Long id);

    void delete(Broker entity);

    List<Broker> findAll();

    List<Broker> findByBrokerDetailContaining(String brokerDetail);
    List<Broker> findByAccountNameContaining(String accountName);
    List<Broker> findByEpicBrokerCodeContaining(String epicBrokerCode);

    List<Broker> findByStatus(String prospect);

//    List<Broker> findByExpiration(LocalDate licenseExpiration);
}  

Вот мой контроллер

     @RequestMapping(value="/edit/{id}")
    public String editbroker(Model model, @PathVariable("id") Long id){
        Broker existing= brokerRepository.findById(id);
        model.addAttribute("broker",existing);
        return "brokerProfile";
    }



    @RequestMapping(value="/saveBroker")
    @ResponseBody
    public JSONObject saveBroker(Model model, @ModelAttribute(value="broker") Broker broker)
    {
        Boolean saved=false;
        JSONObject response=new JSONObject();
        Broker brokerBeforeUpdate=brokerRepository.findById(broker.getId());
        if (brokerBeforeUpdate!=null amp;amp; !brokerBeforeUpdate.getStatus().equals("active") amp;amp; broker.getStatus().equals("active"))
            broker.setOnboardedDate(LocalDate.now());
        else if (!broker.getStatus().equals("active"))
            broker.setOnboardedDate(null);
        try{
            brokerBeforeUpdate=brokerRepository.save(broker);
            saved=true;
            response.put("id",broker.getId());

        }catch (DataAccessException e) {
            e.printStackTrace();
            response.put("error",e.getLocalizedMessage());
            response.put("cause",e.getLocalizedMessage());
        }
        response.put("success",saved);
        return response;
    }  

и вот мой XML:

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.6.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
  	<groupId>com.example</groupId>
	<artifactId>Portal</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>Portal</name>
	<description>Portal</description>
  <properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-ldap</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.dblock.waffle</groupId>
			<artifactId>waffle-spring-security3</artifactId>
			<version>1.8.0</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.security.kerberos</groupId>
			<artifactId>spring-security-kerberos-web</artifactId>
			<version>1.0.1.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.thymeleaf.extras</groupId>
			<artifactId>thymeleaf-extras-java8time</artifactId>
			<version>2.1.0.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>1.4.2.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.microsoft.sqlserver</groupId>
			<artifactId>mssql-jdbc</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>com.jayway.jsonpath</groupId>
			<artifactId>json-path</artifactId>
		</dependency>
		<!-- flying saucer pdf -->
		<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>flying-saucer-pdf</artifactId>
			<version>9.1.4</version>
		</dependency>

		<!-- jxls simple excel -->
		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls</artifactId>
			<version>2.4.3</version>
		</dependency>

		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls-poi</artifactId>
			<version>1.0.14</version>
		</dependency>

		<dependency>
			<groupId>org.jxls</groupId>
			<artifactId>jxls-jexcel</artifactId>
			<version>1.0.6</version>
		</dependency>

		<dependency>
			<groupId>org.thymeleaf.extras</groupId>
			<artifactId>thymeleaf-extras-springsecurity4</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>3.2.8.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.metawidget.modules</groupId>
			<artifactId>metawidget-all</artifactId>
			<version>2.1</version>
			<scope>compile</scope>
		</dependency>

		<!--<dependency>-->
		<!--<groupId>org.springframework.boot</groupId>-->
		<!--<artifactId>spring-boot-starter-tomcat</artifactId>-->
		<!--<scope>provided</scope>-->
		<!--</dependency>-->
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
				<configuration>
					<executable>true</executable>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>  

HTML-форма:

     <div id="rootwizard" class="container" th:with="brokerEndpoint = ${broker.id == null ? '/addBroker' : '/saveBroker'}">
        <form enctype="multipart/form-data" th:action="${brokerEndpoint}" method="post" th:object="${broker}" class="tab-content">
            <h4>Broker Onboarding Info</h4>
            <br/>
                <div class="col-sm-6">
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Broker Detail</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="brokerDetail" th:field="*{brokerDetail}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Account Name</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="accountName" th:field="*{accountName}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Parent Account</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="parentAccount" th:field="*{parentAccount}" class="form-control"/>
                        </div>
                    </div>
                    <br/>

                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Physical Zip</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="physicalZip" th:field="*{physicalZip}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Date Appointed</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="dateAppt" th:field="*{dateAppt}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Phone</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="phone" th:field="*{phone}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Website</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="website" th:field="*{website}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Main Agency Contact</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="mainAgencyContact" th:field="*{mainAgencyContact}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">FEIN #</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="feinNo" th:field="*{feinNo}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8" style="margin-left:5.27rem;">
                            <label>Appointment Paperwork Sent
                                <input type="checkbox" id="apptPaperworkSent" th:field="*{apptPaperworkSent}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8" style="margin-left:13rem;">
                            <label>License Received
                                <input type="checkbox" id="licenseRecd" th:field="*{licenseRecd}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">License Effective</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="licenseEffective" th:field="*{licenseEffective}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">License Expiration</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="licenseExpiration" th:field="*{licenseExpiration}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8" style="margin-left:8rem;">
                            <label>Eamp;amp;O Dec. Page Received
                                <input type="checkbox" id="eoDecPageRecd" th:field="*{eoDecPageRecd}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Eamp;amp;O Effective Date</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="eoEffectiveDate" th:field="*{eoEffectiveDate}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Eamp;amp;O Expiration Date</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="eoExpirationDate" th:field="*{eoExpirationDate}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8" style="margin-left:4.5rem;">
                            <label class="flexFit">W9 Received
                                <input type="checkbox" id="w9Recd" th:field="*{w9Recd}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">W9 Date</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="w9Date" th:field="*{w9Date}" class="form-control date"/>
                        </div>
                    </div>
            </div>
                <div class="col-sm-6">
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Status</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="status" th:field="*{status}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Onboarded Date</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="onboardedDate" th:field="*{onboardedDate}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8 check-div" style="margin-left:6.85rem;">
                            <label>Agent Agreement Received
                                <input type="checkbox" id="agentAgreementRecd" th:field="*{agentAgreementRecd}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8 check-div" style="margin-left:6.85rem;">
                            <label>1099 Required
                                <input type="checkbox" id="x1099required" th:field="*{x1099required}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>

                    <div class="row">
                        <div class="col-sm-6 col-xs-8 check-div" style="margin-left:6rem;">
                            <label style="margin-left: 30px;" >Contact Sheet Received
                                <input type="checkbox" id="contactSheetRecd" th:field="*{contactSheetRecd}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Contact Sheet Date</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="contactSheetDate" th:field="*{contactSheetDate}" class="form-control date"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Description</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="description" th:field="*{description}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Office Paid</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="officePaid" th:field="*{officePaid}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">formerBrokerName</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="formerBrokerName" th:field="*{formerBrokerName}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Eamp;amp;O Renewal Follow-up 1</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="eoRenewalFollowUp1" th:field="*{eoRenewalFollowUp1}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <div class="col-sm-6 col-xs-8 check-div" style="margin-left:7rem;">
                            <label >Eamp;amp;O Follow-up 1 Complete
                                <input type="checkbox" id="eoFollowUp1Complete" th:field="*{eoFollowUp1Complete}" class="flexFit"/>
                            </label>
                        </div>
                    </div>
                    <br/>
                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Eamp;amp;O Renewal Follow-up 2</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="eoRenewalFollowUp2" th:field="*{eoRenewalFollowUp2}" class="form-control"/>
                        </div>
                    </div>
                    <br/>

                    <div class="row">
                        <label class="col-sm-6 col-xs-4 text-right">Billing Zip Code</label>
                        <div class="col-sm-6 col-xs-8">
                            <input type="text" id="billingZipCode" th:field="*{billingZipCode}" class="form-control"/>
                        </div>
                    </div>
                    <br/>
                </div> <!--end of right column-->
                <div class="row">
                    <div class="text-right" sec:authorize="hasRole('ROLE_ADMIN')">
                        <input id="submitButton"  type="submit" value="Save" name="save" class="btn tangramColor txt finish" data-loading-text="Saved!" disabled="true"/><br/>
                    </div>
                </div>
        </form>
    </div>  

Комментарии:

1. Вы упускаете @Repository

2. @Andronicus добавил его, но это не устранило проблему.

3. Просто чтобы быть уверенным, вы проверили, что получаете идентификатор и он действительно существует?

4. @epsilonmajorquezero идентификатор генерируется автоматически при добавлении новой записи с помощью SQL. Также мой URL с идентификатором пользователя выводит правильную информацию, поэтому идентификатор определенно существует. Проблема в том, что findById не получает идентификатор … и я не уверен, почему. Оно отображается как Null.

5. @Stacie «findById не получает идентификатор». Под этим вы подразумеваете, что broker.getId() возвращает Null? Потому что тогда вы должны проверить, что вы отправляете брокеру «/ saveBroker».getId()