- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想实现的是:当我删除该类别时,它的所有相关文章都可以被删除,当我删除该文章时,它也可以在其相关类别中被删除。
我设置了映射关系@ManyToOne
和 @OneToMany(cascade = CascadeType.ALL, mappedBy = " category")
就像下面的代码一样,但是当我在做单元测试时,出现了几个问题,它不起作用。
这是我的代码:
@Entity
public class Article extends Model {
@Id
public Long id;
@Constraints.Required
public String title;
@Constraints.Required
@Lob
@Basic(fetch = FetchType.LAZY)
public String content;
public boolean published = false;
@Formats.DateTime(pattern="yyyy-MM-dd")
public Date publishDate;
@ManyToMany(cascade = CascadeType.REMOVE)
@Column(nullable = true)
public List<Tag> tags = new ArrayList<Tag>();
@ManyToOne
@Column(nullable = true)
public Category category;
public static Finder<Long, Article> finder = new Finder<Long, Article>(Long.class, Article.class);
public Article(String title, String content, Tag[] tags) {
this.title = title;
this.content = content;
this.publishDate = new Date();
this.category = null;
if(tags != null)
for(Tag t : tags)
this.tags.add(t);
}
public static List<Article> all() {
return finder.orderBy("publishDate desc").findList();
}
public static Article create(String title, String content, Tag[] tags) {
Article article = new Article(title, content, tags);
article.save();
article.saveManyToManyAssociations("tags");
return article;
}
public static void delete(Long id) {
finder.ref(id).delete();
}
public static void setCategory(Article article, Category c) {
if(article.category != null)
Category.removeArticle(c, article);
article.category = c;
Category.addArticle(c, article);
article.update();
}
}
@Entity
public class Category extends Model {
@Id
public Long id;
@Required
public String name;
@OneToMany(mappedBy = "category", cascade = CascadeType.ALL)
Set<Article> articles;
public static Finder<Long, Category> finder = new Finder<Long, Category>(Long.class, Category.class);
public Category(String name) {
this.name = name;
}
public static List<Category> all() {
return finder.all();
}
public static Category create(String name) {
Category category = new Category(name);
category.articles = new HashSet<Article>();
category.save();
return category;
}
public static String rename(Long id, String newName) {
Category category = finder.ref(id);
category.name = newName;
category.update();
return newName;
}
public static void delete(Long id) {
Category c = finder.ref(id);
c.delete();
}
public static void addArticle(Category c, Article article) {
if(! c.articles.contains(article)) {
article.category = c;
c.articles.add(article);
article.update();
}
}
public static void removeArticle(Category c, Article article) {
if(c.articles.contains(article)) {
Article.delete(article.id);
c.articles.remove(article);
}
}
public static Map<String,String> options() {
LinkedHashMap<String,String> options = new LinkedHashMap<String,String>();
for(Category c: Category.finder.orderBy("name asc").findList()) {
options.put(c.id.toString(), c.name);
}
return options;
}
}
@Test
public void categoryTest() {
Category c1 = Category.create("Play");
Category c2 = Category.create("SSH");
Category c3 = Category.create("Python");
Category c4 = Category.create("web");
String newName = Category.rename(c3.id, "Django");
Category.delete(c2.id);
List<Category> list = Category.all();
assertEquals(3, list.size());
Map<String, String> map = Category.options();
Article a1 = Article.create("Hello", "Hello world, My Blog!", null);
Article a2 = Article.create("My Blog", "It's build by play framework", null);
Article a3 = Article.create("Play", "Install Play", null);
Category.addArticle(c1, a1);
Category.addArticle(c1, a2);
Category.addArticle(c3, a3);
Category.delete(c3.id);
Category.removeArticle(c1, a1);
assertEquals(2, list.size());
assertEquals("Play", list.get(0).name);
//assertEquals("Django", map.get("3"));
assertEquals(1, Article.all().size());
assertEquals(1, c1.articles.size());
assertEquals(false, c1.articles.contains(a1));
}
assertEquals(2, list.size());
Category.delete(c2.id);
assertEquals(1, Article.all().size());
最佳答案
在上面的代码中,只有一个断言没有通过。这是:
assertEquals(2, list.size());
List<Category> list = Category.all();
assertEquals(3, list.size());
Category.delete(c3.id);
assertEquals(2, list.size());
list = Category.all();
关于ebean - Play 框架 2.1 和 Ebean : @ManyToOne and @OneToMany, CRUD 和级联问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15450071/
我定义了一个没有字段的基本模型,并通过 Ebean 的 eclipse 插件对其进行了增强。然后我用java反编译器反编译,发现ebean给它添加了一些字段和方法: private static St
我有一个 wicket 应用程序,并且正在使用 Ebean ORM 映射。我已在 ebean.properties 中设置了所有凭据。但是当我将其部署到服务器上时,我收到一条错误消息“无法初始化类 c
我想实现的是:当我删除该类别时,它的所有相关文章都可以被删除,当我删除该文章时,它也可以在其相关类别中被删除。 我设置了映射关系@ManyToOne和 @OneToMany(cascade = Cas
我试图复制文档: https://www.playframework.com/documentation/2.5.x/JavaEbean 我按照文档中提到的方式设置了所有内容。 project\plu
我正在尝试进行查询,以检查用户的电子邮件或名称是否以给定的字符串开头。在 sql 查询中,我会使用 name like 'queryString%' or email like 'queryStrin
我有一个带有字段 id 、 name 、 price 等的类产品,... 我只想从表中获取名称.. 我正在使用这个查询 String sql = "select name from produc
我使用的是 Play Framework 2.3,当我尝试创建自己的 SQL 查询时,我总是遇到映射忽略问题。 我不知道是否应该使用 Ebean 来编写这个复杂的 sql 查询。 这是运行良好的 SQ
我有一个模型类,它定义了属于同一类模型的子级列表。保留一个带有一些初始子对象的新对象效果很好,但是当我有两个或更多级别的子对象时,Ebean 似乎无法很好地处理它。这似乎出乎意料,所以我担心我犯了一个
我有一个关于 Ebean 的问题。不幸的是我找不到任何文档来帮助我。我想选择值为 true 且 OneToMany 关系的所有成员也具有 true 值的所有行。 这是一个例子: @Entity pub
我有一个以下模型类。这只是为了测试。 @Entity public class Quest { public static final Find find = new Find() {};
我正在尝试在同一个实体中创建一个@OneToMany 关系。这是一个示例代码: @Entity public class Client extends Model{ private stati
我有一个表,除其他外,它有两列 Long 类型。在我的查询中,我想返回 A 列(长型)等于 B 列(长型)的行。我想在不编写原始 sql 的情况下执行此操作,而是使用更好的方法链接。 到目前为止,我一
我正在尝试在 Java Play 中使用 Ebean 2.3.3 查询部分对象!框架 2.2.1。例如,要获取仅包含 instance_config 中的 id、host 和 publicKey 字段
我在查询要在数据库中搜索自动完成功能的字符串时遇到了一个小问题,我遇到的问题是我需要第一个结果是所有以“开头”的语句,然后是包含该语句的语句字符串! 例如:如果我在数据库的表中得到以下记录: Awes
我有以下代码: @Entity public class Album extends Model { /** * Generated UID */ private
我对 Ebean 的世界是全新的Play Framework 2 中使用的 ORM 持久层。我最初的印象非常好,但在我的业余项目中,我偶然发现了我不知道如何解决的问题。我不确定我是否做错了什么(模型?
我正在尝试进行查询,以检查帐户信息是否处于 Activity 状态(boolean = True)及其针对该用户的信息(来自模型的用户 ID)。在 SQL 中我会这样写 Select * from m
我喝了一些 Gin ,我喝了一些补品,它们是多对多关系。现在我还有一张 table gin2tonic。它只有 2 个键,它们都与 tonic 和 gin 的 id 无关。 我想用匹配的补品检索所有
Ebean ORM 是 Play 的首选 ORM! Java 框架。当我在构建自己的对象关系映射器和其他对象关系行为模式以及使用 ORM 之间做出选择时,我觉得非常重要的一个标准是 Ebeans 是否
我创建了使用 Ebeans 的示例应用程序: 型号: @Entity public class Numm extends Model { @Id private long id;
我是一名优秀的程序员,十分优秀!