如何为多个数据库表创建表单?

时间:2015-06-09 10:18:43

标签: java spring jpa spring-data-jpa

我有一个处理文本文件的应用程序。取决于文件生成器, 它搜索一些定义的文本。然后它对找到的文本执行不同的操作。 这些操作存储在数据库中,对应于以下实体:

@Entity
@Table(name = "file_generator")
public class FileGenerator {

    @Id
    @GeneratedValue
    private long id;

    private String name;

    @OneToMany(mappedBy = "fileGenerator", cascade = CascadeType.ALL)
    private Set<Action> actions = new HashSet<>();

}

@Entity
@Table(name = "detection_text")
public class DetectionText {

    @Id
    @GeneratedValue
    private long id;

    private String text;

}

@Entity
public class Action {

    @Id
    @GeneratedValue
    private long id;

    @Enumerated(EnumType.STRING)
    private Name name;

    @ManyToOne
    @JoinColumn(name = "file_generator_id")
    private FileGenerator fileGenerator;

    @ManyToOne
    @JoinColumn(name = "detection_text_id")
    private DetectionText detectionText;

    public enum Name {

        DELETE, REPLACE_WITH_DEFAULT

    }

}

例如,如果我想删除foo生成的文件中bar的所有出现,我会在我的数据库中写下以下内容:

file_generator:

+----+------+
| id | name |
+----+------+
|  1 | bar  |
+----+------+

detection_text:

+----+------+
| id | text |
+----+------+
|  1 | foo  |
+----+------+

动作:

+----+-------------------+-------------------+--------+
| id | file_generator_id | detection_text_id |  name  |
+----+-------------------+-------------------+--------+
|  1 |                 1 |                 1 | DELETE |
+----+-------------------+-------------------+--------+

现在我想创建一个网站,让用户将新的FileGenerator与...一起存储 Action关系和一个允许用户编辑此“视图”的网站。我在下面创建了一个片段 显示表格。

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet" />
<form style="margin: 20px;">
  <div class="form-group">
    <label for="file-generator-name">File generator</label>
    <input type="text" class="form-control" id="file-generator-name" name="file-generator-name" />
  </div>
  <div class="form-group">
    <label for="delete-detection-texts">'DELETE' detection texts</label>
    <select class="form-control" id="delete-detection-texts" name="delete-detection-texts" multiple="true">
      <option value="1">All</option>
      <option value="1">available</option>
      <option value="1">detection</option>
      <option value="1">texts</option>
    </select>
  </div>
  <div class="form-group">
    <label for="replace-detection-texts">'REPLACE_WITH_DEFAULT' detection texts</label>
    <select class="form-control" id="replace-detection-texts" name="replace-detection-texts" multiple="true">
      <option value="1">All</option>
      <option value="1">available</option>
      <option value="1">detection</option>
      <option value="1">texts</option>
    </select>
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>

如何实现此功能?它甚至可能吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我创建了一个支持表单的新bean:

public class FileGeneratorAndDetectionTexts {

    private String fileGeneratorName;

    private Set<DetectionText> deleteTexts;

    private Set<DetectionText> replaceTexts;

}

我将服务层中的这个bean转换为OP中的相应对象。