如何使用类中的 setters 方法将数据插入 JPA 实体表?

Posted

技术标签:

【中文标题】如何使用类中的 setters 方法将数据插入 JPA 实体表?【英文标题】:How to insert data into JPA Entity table using a setters method from class? 【发布时间】:2016-12-26 13:33:00 【问题描述】:

以下是我创建表并定义 set 方法的方式:

@Entity
@Table(name = "Book")
public class Book extends AbstractPersistable<Long> 

@Column(name = "id")
private Long id;
@Column(name = "name")
private String name;

public void setContent (String name) 
    this.name = name;


从控制器这就是我尝试设置内容的方式:`

@RequestMapping("/addBook")
@ResponseBody
public String addBook(@RequestParam("name") String name) 
    Book book = new Book();
    book.setContent(name);
    return name;        

当我使用 name 参数值从 addBook 页面设置新内容时,该内容显示在同一页面上。现在我要做的是向表中插入更多内容,但我不确定是否将内容插入到表中。我需要在表格中添加更多内容。 setContent 方法是更新还是插入内容?如果它有内容,我应该如何查看表格?

【问题讨论】:

仅仅设置数据不会对数据库进行更改。您可以查看 Spring Data JPA docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/… ...您可以要求 spring 存储库将对象保存在 DB 中 @Neil 感谢您的建议。我需要保存它,而这正是我所缺少的。 【参考方案1】:

我假设您有一个 spring 存储库来执行类似的 CRUD 操作

public interface BookRepository extends JpaRepository<Book ,Long> 


然后在你的控制器类中你有

@Autowired
private BookRepository repo;

现在在您的 addBook 方法中,您可以通过这种方式保存书籍对象

@RequestMapping("/addBook")
@ResponseBody
public String addBook(@RequestParam("name") String name) 
    Book book = new Book();
    book.setContent(name);
    repo.save(book);
    return name;        

您的图书对象现在将添加到您的数据库中

【讨论】:

@A Sdi 感谢您的建议。除了将对象保存到 repo 之外,我做了其他所有事情。现在我已经尝试过了,并使用 thymeleaf 模板将响应发送到名为 book.html 的视图页面。在控制器中,这是我发送响应的方式: 但页面崩溃并说:异常评估 SpringEL 表达式:“book.name”。在 IDE 控制台中,发现错误为:org.springframework.expression.spel.SpelEvaluationException:EL1008E:在“sec.book.BookNames”类型的对象上找不到属性或字段“名称”。有什么问题? 你有名称的getter方法吗?如果是这样,它是私人的吗? @A Sdi 是的,我有一个 getter 方法,它返回 this.name 及其公共。我真的需要这种方法吗?我想在视图文件中显示书名,我正在按照此页面thymeleaf.org/doc/articles/springmvcaccessdata.html 中的说明进行操作。我使用那里显示的第一种方法发送响应,以及如何列出名称以查看文件。 是的,您必须拥有 getter 才能访问书名。您可以将模型属性、请求参数或会话属性传递给您的视图,并且它们访问该值的唯一方法是通过 getter ,当有 $book.name 或 $param.name 或 $session.myBookSessionAttribute .name 在你看来,你实际上是在调用对象的getter方法,Thymeleaf首先检查对象并尝试识别它的类型,然后调用getter来显示它的属性【参考方案2】:

@Gustav - 您是否也在寻找类似 --> 随着参数传递生成的 sql 是什么?

那你就可以用点东西了

  @Bean
  public Map<String, String> jpaProperties() 
    Map<String, String> props = new HashMap<>();
    props.put("eclipselink.logging.level.sql", "FINE");
    props.put("eclipselink.logging.parameters", "true");
    return props;

【讨论】:

@Shubhasis 目前我没有在寻找任何其他方式,但肯定会在未来找到。我也会试试这个。感谢您的支持。

以上是关于如何使用类中的 setters 方法将数据插入 JPA 实体表?的主要内容,如果未能解决你的问题,请参考以下文章

是否使用 getter 和 setter 将消息从父 UIViewController 传递到 UIView 类中的方法?

c# 使用基类中的 setter 或 getter

如何从同一类中的另一个方法检索最后插入的 id?

SQLAlchemy:声明性 Mixin 类中的 getter/setter

如何为python类中的私有属性编写getter-setter方法?

如何从另一个类中的一个类调用 setter 函数?