当前位置: 首页 > 知识库问答 >
问题:

将动态列添加到实体,而不将其保存到表中

萧德庸
2023-03-14

我有一个模型类,如下所示:

package com.example.model;
import java.util.Map;

import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import com.example.helpers.StringMapConverter;
@Entity
@Table(name = "buildingcompanies")

public class Buildcompanies {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    @Column(name = "shortname")
    private String shortname;
    @Column(name = "fullname")
    private String fullname;
    @Column(name = "address")
    private String address;
    @Column(name = "telephone")
    private String telephone;
    @Column(name = "website")
    private String website;
    @Column(name = "sociallinks")
      @Convert(converter = StringMapConverter.class)

    private  Map<String, String> sociallinks;
    @Column(name = "foundationyear")
    private String foundationyear;
    
    public Buildcompanies() {

    }

    public Buildcompanies(String shortname, String fullname, String address, String telephone, String website,
            Map<String, String> map, String foundationyear) {
        this.shortname = shortname;
        this.fullname = fullname;
        this.address = address;
        this.telephone = telephone;
        this.website = website;
        this.sociallinks = map;
        this.foundationyear = foundationyear;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getShortname() {
        return shortname;
    }

    public void setShortname(String shortname) {
        this.shortname = shortname;
    }

    public String getFullname() {
        return fullname;
    }

    public void setFullname(String fullname) {
        this.fullname = fullname;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getTelephone() {
        return telephone;
    }

    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }

    public String getWebsite() {
        return website;
    }

    public void setWebsite(String website) {
        this.website = website;
    }

    

    public Map<String, String> getSociallinks() {
        return sociallinks;
    }

    public void setSociallinks(Map<String, String> sociallinks) {
        this.sociallinks = sociallinks;
    }

    public String getFoundationyear() {
        return foundationyear;
    }

    public void setFoundationyear(String foundationyear) {
        this.foundationyear = foundationyear;
    }
    
    
    
    
    
    
}

以及控制器中显示输出的方法:

public ResponseEntity<List<Buildcompanies>> getAllCompanies(@RequestParam(required = false) String name) {
      try {
        List<Buildcompanies> companies = new ArrayList<Buildcompanies>();
        int test=0;
        if (name == null)
        {
            buildcompaniesRepository.findAll().forEach(companies::add);
            
        }
        else
          buildcompaniesRepository.findByShortnameContaining(name).forEach(companies::add);

        if (companies.isEmpty()) {
          return new ResponseEntity<>(HttpStatus.NO_CONTENT);
        }

        return new ResponseEntity<>(companies, HttpStatus.OK);
      } catch (Exception e) {
        return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
      }
    }

它确实显示了一个输出,一切都很好:

[
    {
        "id": 81,
        "shortname": "testing",
        "fullname": "test",
        "address": "addrtest",
        "telephone": "380979379992",
        "website": "www.site.com",
        "sociallinks": {
            "facebook": "fb.com"
        },
        "foundationyear": "1991"
    }

]

我想计算每个公司的评级,同时向最终用户显示数据。因此,输出应如下所示:

[
    {
        "id": 81,
        "shortname": "testing",
        "fullname": "test",
        "address": "addrtest",
        "telephone": "380979379992",
        "website": "www.site.com",
        "sociallinks": {
            "facebook": "fb.com"
        },
        "foundationyear": "1991",
"rating": "1.5"
    }
]

是否可以将评级列动态添加到公司列表中,或者我应该在数据库中创建评级列,在控制器中更新其方法,迭代findAll()结果,并在用户每次尝试访问/列表endpoint时调用它?

共有1个答案

漆雕安晏
2023-03-14

您有两个选择:

>

  • 为此,您可以在buildcompanys类中引入一个新属性,并用@Transient注释它。这将表示该属性不需要在DB中持久化,并且JPA不会尝试在表中创建列。

    推荐的方法是不使用实体类作为响应对象。理想情况下,您应该有一个域对象,数据库响应应该映射到这个对象。在映射时,您可以应用想要添加到其中的任何自定义详细信息。

  •  类似资料:
    • 我想创建一个对象动态,例如在JavaFX中的一个圆。我的代码会像这样。 我现在的问题是如何增加每个圆的独特性。例如,如果我要添加每个圆的不同颜色和大小。我该如何实现呢?请帮忙。

    • 我从消防队拿到了我的文件。目前我在列表中有以下内容: 然后,在下面的方法中,我转换这个列表以放入一个具有所需格式的地图。

    • 问题内容: 我的研究和实验还没有得到答案,所以我希望能有所帮助。 我正在修改一个应用程序的安装文件,该应用程序在以前的版本中没有我想立即添加的列。我不想手动添加列,而是要在安装文件中并且仅在表中不存在新列的情况下才添加。 该表如下创建: 如果我在create table语句下面添加以下内容,那么我不确定如果该列已经存在(可能已填充)会发生什么情况: 因此,我尝试了在某处找到的以下内容。这似乎不起作

    • 问题内容: 有没有办法可以从python发送表单的(css)类?例如: 这呈现了一个简单的文本字段,但是我希望该文本字段具有的CSS类,是否可以直接从python进行? 我知道我可以直接从python 放一个,但不能放一个类。 更新:我尝试了,但没有成功,我得到了: 问题答案: WTForms不允许你在字段初始化中设置显示选项(例如类名)。但是,有几种方法可以解决此问题: 如果你所有的字段都应包含

    • 问题内容: 我的表格中有3个字段。我有一个提交按钮和一个“添加其他字段”按钮。我知道我可以使用表单类中的方法添加字段。 我是Python和Django的新手,并且陷入了一个初学者的问题;我的问题是: 当我单击“添加其他字段”按钮时,添加其他字段的过程是什么? 是否需要再次呈现表单? 我如何以及何时打电话,甚至必须打电话? 如何将参数传递给? 问题答案: 你的表单必须基于从POST传递给它的一些变量

    • 我使用以下方法在easytable(easytable)中创建我的表头 然后,绘制表格: 表格标题绘制正确,但。。动态添加行的方法是什么?我必须画一张新桌子吗?我可以向已经创建的表中添加行吗? 谢谢