使用Spring Boot的@OneToMany关系控制器

时间:2018-11-08 19:20:36

标签: java database spring-mvc spring-boot spring-data-jpa

我正在尝试使用Spring Boot和数据库。

所以我有2个具有public interface IStartable {void Start();bool IsRunning{get;}} public interface IStoppable {void Stop();bool IsRunning{get;}} public interface IBatchJob: INamable, IStartable, IStoppable {} public class BatchJob: IBatchJob { public string Name {get; private set;} public bool IsRunning {get; private set;} public BatchJob(string name) {Name = name;} public void Start() {IsRunning = true;} public void Stop() {IsRunning = false;} } public class AutoStopBatchJob: BatchJob { System.Timers.Timer batchTimer; public AutoStopBatchJob(string name, TimeSpan maxRunTime): base (name) { batchTimer = new System.Timers.Timer(); batchTimer.AutoReset = false; batchTimer.Interval = maxRunTime.TotalMilliseconds; batchTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); } public override void Start() { base.Start(); batchTimer.Start(); } private void OnTimedEvent(object source, ElapsedEventArgs e) { Stop(); } } [TestClass] public abstract class IStartableTests { protected abstract IStartable CreateInstance(); [TestMethod] public void StartSetsRunningToTrue() { var instance = CreateInstance(); Assert.AreEqual(false, instance.IsRunning); instance.Start(); Assert.AreEqual(true, instance.IsRunning); } } [TestClass] public abstract class IBatchJobTests: INamableTests { public abstract IBatchJob CreateInstance(string name); //I've extended INamablTests, so those will get run. //However, how should I test IStartable and IStoppable? } [TestClass] public class BatchJobTests: IBatchJobTests { public static BatchJob CreateInstance(string name) => new BatchJob(name); public IBatchJob CreateInstance(string name) => BatchJobTests.CreateInstance(name); //do I have to implement nested classes for these interfaces for every derived class? [TestClass] public class BaseClassIStartableTests : IStartableTests { protected IStartable CreateInstance() => BatchJobTests.CreateInstance("Default Name"); } [TestClass] public class BaseClassIStoppableTests : IStoppableTests { protected IStoppable CreateInstance() => BatchJobTests.CreateInstance("Default Name", initialRunningState:=true); } } 关系的实体:

@OneToMany

第二个:

@Entity
public class Team {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int teamId;

    @Column
    private String teamTitle;

    @Column
    private String teamCity;

    @ManyToOne
    @JoinColumn(name = "conferenceId", nullable = false)
    private Conference teamConference;

    public Team() { super(); } 

//some getters and setters
    }

Jsp页面:

@Entity
public class Conference {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int conferenceId;

    private String conferenceTitle;

    @OneToMany(mappedBy = "teamId")
    private List<Team> conferenceTeams;

    public Conference() {
        super();
    }

//some getters and setters
}

和控制器类:

<body>
<form:form method="post" modelAttribute="team">
  <div>
    <form:label path="teamTitle">Title</form:label>
    <form:input path="teamTitle" type="text"/>
    <form:label path="teamCity">City</form:label>
    <form:input path="teamCity" type="text"/>

    //DAHELL IS HERE
    <div class="form-group">
      <label for="conferenceList">Select conference:</label>
      <select class="form-control" id="conferenceList">
        <c:forEach items="${conference}" var="conf">
          <option>${conf.conferenceTitle}</option>
        </c:forEach>
      </select>
    </div>

    <button type="submit" class="btn btn-success">Add</button>
  </div>
</form:form>

// jquery etc
</body>

ConferenceDAO和TeamDAO只是从JpaRepository扩展的接口。

所以我想了解的是如何添加新的@Controller public class TeamsController { @Autowired private TeamDAO teamDAO; @Autowired private ConferenceDAO conferenceDAO; @RequestMapping(value = "/schedule", method = RequestMethod.GET) public String showSchedule(ModelMap model) { model.put("conferences", conferenceDAO.findAll()); model.put("teams", teamDAO.findAll()); return "schedule"; } @RequestMapping(value = "/new-team", method = RequestMethod.GET) public String addNewTeam(ModelMap model) { model.addAttribute("conference", conferenceDAO.findAll()); model.addAttribute("team", new Team()); return "new-team"; } @RequestMapping(value = "/new-team", method = RequestMethod.POST) public String addTeam(ModelMap model, Team newTeam) { teamDAO.save(newTeam); return "redirect:/schedule"; } } 。我在Team页上插入标题和城市,还应该选择该团队所属的会议。但是当我按下jsp按钮时,我得到了

add

我在做什么错?我相信There was an unexpected error (type=Internal Server Error, status=500). No message available 页面中包含selecting部分的内容。而且我100%肯定我在jsp类中遗漏了一些东西。我应该以某种方式将新团队保存到数据库中,并且Controller列还应显示它包含此新团队。 如果您向我展示挖掘方式,我将非常感谢。

1 个答案:

答案 0 :(得分:0)

是的,评论确实很有帮助。因此,对于那些阅读它的人来说,请先沉迷于问题并阅读日志,然后再提出愚蠢的问题(就像我:D一样) 问题出在 Undefined symbols for architecture x86_64: "_ASN1_INTEGER_set", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_EVP_PKEY_free", referenced from: routine1(void*) in CA-ceff6a.o "_EVP_sha1", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_PEM_write_PrivateKey", referenced from: write_to_disk(evp_pkey_st*, x509_st*) in CA-ceff6a.o "_PEM_write_X509", referenced from: write_to_disk(evp_pkey_st*, x509_st*) in CA-ceff6a.o "_X509_NAME_add_entry_by_txt", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_free", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o routine1(void*) in CA-ceff6a.o "_X509_get_serialNumber", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_get_subject_name", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_gmtime_adj", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_new", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_set_issuer_name", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_set_pubkey", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o "_X509_sign", referenced from: generate_x509(evp_pkey_st*) in CA-ceff6a.o ld: symbol(s) not found for architecture x86_64 页和jsp表格内。我得到selection的{​​{1}},如果我要阅读日志,我会知道的。 因此,有关检查整个堆栈跟踪并更改Null选择部分的评论对我有用。

固定的conferenceId选择是:

jsp

谢谢!