Java 如何在spring boot应用程序中更新记录?

Java 如何在spring boot应用程序中更新记录?,java,spring,spring-boot,hibernate,spring-mvc,Java,Spring,Spring Boot,Hibernate,Spring Mvc,我试图在spring boot应用程序中更新记录,但它添加了一个新记录,而不是更新,我还想搜索 import java.sql.Timestamp; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.T

我试图在spring boot应用程序中更新记录,但它添加了一个新记录,而不是更新,我还想搜索

import java.sql.Timestamp;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.Transient;

@Entity

public class Events {
    
private Long id;

private String game;

private String catergory;

private String venue;

private float entrance_fee;

private String date;

private String time;

private Timestamp created_time;


private String image;

public Events() {

    super();

    // TODO Auto-generated constructor stub
}



@Id

@GeneratedValue(strategy = GenerationType.IDENTITY)

public Long getId() {

    return id;
}

public void setId(Long id) {

    this.id = id;
}

public String getGame() {

    return game;
}

public void setGame(String game) {

    this.game = game;
}


public String getCatergory() {

    return catergory;
}

public void setCatergory(String catergory) {

    this.catergory = catergory;
}

public String getVenue() {

    return venue;
}

public void setVenue(String venue) {

    this.venue = venue;
}

public float getEntrance_fee() {

    return entrance_fee;
}

public void setEntrance_fee(float entrance_fee) {

    this.entrance_fee = entrance_fee;
}

public String getDate() {

    return date;
}

public void setDate(String date) {

    this.date = date;
}

public String getTime() {

    return time;
}

public void setTime(String time) {

    this.time = time;
}

public Timestamp getCreated_time() {

    return created_time;
}

public void setCreated_time(Timestamp created_time) {

    this.created_time = created_time;
}

public String getImage() {

    return image;
}

public void setImage(String image) {

    this.image = image;
}


@Transient

public String getImagePath() {

    if(image == null || id == null) return null;
    
    return "/event-images/" + id + "/" + image;
}

}
这是我的存储库

import java.util.List;

import org.springframework.data.repository.PagingAndSortingRepository;

import org.springframework.stereotype.Repository;


@Repository

    public interface EventsRepository extends PagingAndSortingRepository<Events, Long> {
    
        List<Events> findByCatergoryLike(String catergory);
        
        
    
    }
最后是更新表单

<form action="#" th:action="@{/update_event}" th:object="${Edit_events}" method="post" 

enctype="multipart/form-data">
            
            <div id="name">


            <h2 class="name">Sports</h2>

                <input class="firstname" type="text" th:field="*{game}" /><br>
                                
                 <input class="lastname" type="text" th:field="*{catergory}" /><br>
                
                </div>

            <h2 class="name">Venue</h2>

            <input  class="username" type="text" th:field="*{venue}" />
            
            <h2 class="name">Entrance Fee</h2>

            <input class="email" type="text" th:field="*{entrance_fee}" />
            
            <h2 class="name">Date & Time</h2>


            <input type="date" class="password" th:field="*{date}" />
           
            
             <input  type="time" class="number" th:field="*{time}" /><br>
           

                
             <img th:src="*{imagePath}">



             <input type="file" class="photoBtn" name="fileImage" id="fileImage" accept="image/png, 



image/jpeg"/> <button type="submit">SAVE CHANGES</button><a th:href="@{/events}">..DISCARD..</a>


           
        </form>

体育


地点 入场费 日期和时间
保存更改
解决方案非常简单,您需要先获取记录,然后使用save(events)更新它 例如:在请求负载中,您获取事件类的对象,使用
eventsRepository.findById(events.id)
JPA存储库调用获取数据,然后更新返回的实例,然后保存它,内部JPA检查条目是否已注册。如果是,则将更新,否则将创建一个新条目

` Optinal<Events>currentEvent = eventsRepository.findById(events.id); if(currentEvent.isPresent()){// map the input values with currentEventusing mapper  eventsRepository.save(events) }`
OptinalcurrentEvent=eventsRepository.findById(events.id);if(currentEvent.isPresent()){//使用映射器eventsRepository.save(events)将输入值映射到currentEvent}`
<>希望对更新记录有帮助的

您必须从DB获取数据并更新它,并使用SAVER()方法在DBPlease插入更新的数据,花时间到<代码>格式<代码>您的代码(并考虑将代码减少到与回答您的问题相关的代码)。谢谢您,先生,但是现在它说:longic类型的方法参数缺少URI模板变量'id'。如果您想要@PathVariable,您需要在@RequestMapping条目中指定占位符,告诉Spring路径变量在URI中的位置,例如:/update_event/{id}
<form action="#" th:action="@{/update_event}" th:object="${Edit_events}" method="post" 

enctype="multipart/form-data">
            
            <div id="name">


            <h2 class="name">Sports</h2>

                <input class="firstname" type="text" th:field="*{game}" /><br>
                                
                 <input class="lastname" type="text" th:field="*{catergory}" /><br>
                
                </div>

            <h2 class="name">Venue</h2>

            <input  class="username" type="text" th:field="*{venue}" />
            
            <h2 class="name">Entrance Fee</h2>

            <input class="email" type="text" th:field="*{entrance_fee}" />
            
            <h2 class="name">Date & Time</h2>


            <input type="date" class="password" th:field="*{date}" />
           
            
             <input  type="time" class="number" th:field="*{time}" /><br>
           

                
             <img th:src="*{imagePath}">



             <input type="file" class="photoBtn" name="fileImage" id="fileImage" accept="image/png, 



image/jpeg"/> <button type="submit">SAVE CHANGES</button><a th:href="@{/events}">..DISCARD..</a>


           
        </form>
` Optinal<Events>currentEvent = eventsRepository.findById(events.id); if(currentEvent.isPresent()){// map the input values with currentEventusing mapper  eventsRepository.save(events) }`