【发布时间】:2014-06-24 02:32:35
【问题描述】:
我在 Play Framework 2.2.3 中有以下文件
控制器:
public class Comment extends Controller
{
public Result create(UUID id)
{
models.blog.Blog blog = models.blog.Blog.finder.byId(id);
Result result;
if(blog == null)
{
result = notFound(main.render("404", error404.render()));
}
else
{
Form<models.blog.Comment> commentForm = Form.form(models.blog.Comment.class);
commentForm = commentForm.bindFromRequest();
if(commentForm.hasErrors())
{
result = badRequest(Json.toJson(commentForm));
}
else
{
models.blog.Comment comment = commentForm.get();
comment.setId(UUID.randomUUID());
comment.setTimeCreated(new Date());
comment.setBlogId(blog.getId());
comment.save();
result = ok(Json.toJson(comment));
}
}
return result;
}
}
还有两个模型
@Entity
@Table(name="blog")
public class Blog extends Model
{
private static final SimpleDateFormat MONTH_LITERAL = new SimpleDateFormat("MMMMM"),
DAY_NUMBER = new SimpleDateFormat("d"),
YEAR_NUMBER = new SimpleDateFormat("yyyy");
public static Finder<UUID, Blog> finder = new Finder<UUID, Blog>(UUID.class, Blog.class);
@Id
@Column(name="id",length=36, nullable=false)
public UUID id;
@OneToOne
@JoinColumn(name="author_id")
public User author;
@Column(name="title",length=255)
public String title;
@Column(name="summary",length=255)
public String summary;
@Column(name="url",length=255)
public String url;
@Column(name="content")
public String content;
@Column(name="time_updated")
public Date time_created;
@Column(name="time_created", nullable=false)
public Date time_updated;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name="blog_id")
public List<Comment> comments;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(
name="blog_tag_map",
joinColumns={ @JoinColumn(name="blog_id", referencedColumnName="id") },
inverseJoinColumns={ @JoinColumn(name="tag_id", referencedColumnName="id") }
)
public List<Tag> tags;
public List<Comment> getComments()
{
return this.comments;
}
}
@Entity
@Table(name="blog_comment")
public class Comment extends Model
{
private static final SimpleDateFormat MONTH_LITERAL = new SimpleDateFormat("MMMMM"),
DAY_NUMBER = new SimpleDateFormat("d"),
YEAR_NUMBER = new SimpleDateFormat("yyyy");
@Id
@Column(name="id",length=36, nullable=false)
public UUID id;
@Column(name="blog_id", length=36)
public UUID blog_id;
@ManyToOne
public Blog blog;
@Column(name="content", length=500)
public String content;
@Column(name="website", length=255)
public String website;
@Column(name="name", length=255)
public String name;
@Column(name="time_created", updatable=false)
public Date time_created;
}
为了简洁起见,我已经从这些模型中排除了一些 setter 和 getter,所以它不会阻塞这篇文章。
当我尝试向上述控制器发出 POST 请求时,一切正常,直到我到达控制器文件中的“comment.save()”语句,然后我收到以下错误。
我不确定为什么此保存没有通过,以及为什么存在列冲突。 非常感谢帮助
【问题讨论】:
-
看起来您引用了 Comment 上定义的 Blog 实体。不要同时定义外键的列映射。只是实体引用 - 考虑对象而不是表/FK。
-
评论对象上没有到博客的列映射。除非您指的是 Blog 类中定义的列映射,否则无论我删除任何一个,它仍然会引发相同的错误。
标签: java database jpa playframework-2.0 ebean