Java 在SubmitSpringMVC上绑定子对象

Java 在SubmitSpringMVC上绑定子对象,java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我是Java新手,所以这个问题看起来很简单。我有一个这样的模型: @Entity(name="website") public class Website { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name="websiteId", nullable=false, unique=true) private long websiteId; @ManyToOne @JoinColumn(name = "publis

我是Java新手,所以这个问题看起来很简单。我有一个这样的模型:

@Entity(name="website")
public class Website {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="websiteId", nullable=false, unique=true)
private long websiteId;
@ManyToOne
@JoinColumn(name = "publisherId")
private Publisher publisher;

public Website() {
}

//... all getter and setter....
}
你看,在Website类中,我有一个Publisher类型的对象:

@Entity(name="publisher")
public class Publisher {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="publisherId", nullable=false, unique=true)
private long publisherId;
private String publisherName;

@OneToMany(fetch=FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name="publisherId")
private List<Website> listWebsite;

public Publisher() {
}

//...all getter and setter...
}
我已将select标记的路径从
publisher
更改为
publisher.publisherId
,如下所示,来自Shantaram Tupe,但表单无法生成为html。我从
publisher
改为
publisher.publisherName
,一切看起来都很好,表单可以用html查看,值在
publisher.publisherName
中发回服务器。我怎样才能把它发回publisher.publisherId?我的publisherId字段的配置似乎有问题

更新2

我的问题是只生成HTML表单。我尝试过在浏览器上编辑生成的html表单,例如:

<form.....>
<select id="publisher.publisherName" name="publisher.publisherName" size="1">......</select>
</form>
<form.....>
<select id="publisher.publisherId" name="publisher.publisherId" size="1">......</select>
</form>

......
例如:

<form.....>
<select id="publisher.publisherName" name="publisher.publisherName" size="1">......</select>
</form>
<form.....>
<select id="publisher.publisherId" name="publisher.publisherId" size="1">......</select>
</form>

......
一切都很顺利。现在,如何使用
publisher.publisherId
生成表单

上次更新


最后,我找到了它。它适用于PublisherName,但不适用于PublisherName,因为PublisherName是字符串类型。我使用的select标记中的转储项(
)的值为
NONE
——不能是长类型值。将其更改为
0
,并成功生成表单。

只需将
标记中的路径从
更改为
publisher.publisherId

我这边还有一些事情:

  • 您不需要使用
    @Column(name=“websiteId”,nullable=false,unique=true)

    • 因为数据库中的列名和实体类中的字段名相同
    • 因为它是用
      @Id
      注释的,所以它永远不会null,默认情况下uniqe
  • 您不需要在两侧使用
    @JoinColumn
    ,在
    @OneToMany
    侧使用mappedBy属性,例如
    @OneToMany(mappedBy=“publisher”)


  • 谢谢你在旁边的建议,我把票打了,但是改变路线没有帮助。起初,我按照您所说的那样放置路径(publisher.publisherId),但表单甚至无法生成为html。我将其更改为publisher,表单生成成功。我将用控制器函数更新我的问题。嗯。。。。我可以提供更多的东西。如果我将路径更改为“publisher.publisherName”,则表单生成成功,数据回发到服务器ok,publisherName的long type值为-fantastic。但是,如果我将其改回“publisher.publisherId”,该表单仍然无法生成。我已用许多内容更新了该问题,以使其更清晰。真的希望你能帮助我摆脱困境。<代码> PuxiSeID 的值可能是什么,除了<代码>没有< /代码>?如果所有都是<代码>长< /代码>类型,请考虑改变<代码>没有< /C> >,改为其他代码>代码>长类型…