我有一个无法更改的数据库设计。数据库具有具有一对一关系的表和 View 。 View 包含一些从表中计算出的额外信息。相关信息是行的状态。为这种关系设置的权限是 View 是只读的,因为表具有所有可用的 CRUD 操作。 JPA 是选定的 ORM 映射到此设置。该应用程序是一个基本的 CRUD 应用程序,通过检查 View 中的状态和其他属性然后插入/更新相应的表来进行一些验证。这是我尝试对这种情况进行建模的两种方法的示例。我想知道哪一个更有效、更容易使用和/或“正确的方法”来做到这一点。
选项 1 - 这个选项很好,因为我可以使用 JPA 提供的所有接口(interface)与数据库交互。这个选项不好,因为有时我必须加载一个表和一个看起来非常多余的模型,并且每个表有 3 个文件。
Model.java
package models;
// relevant imports
public abstract class Model {
// columns that are shared with table and view
}
Table.java
package models;
// relevant imports
@entity("table")
public class Table extends Model {
// Relationships with other tables
}
View.java
package models;
// relevant imports
@entity("view")
public class View extends Model {
// View specific columns ...
// Relationships with other views
}
选项 2 - 这个选项很好,因为我只需要加载 View 并且每个表都有一个文件。此选项不好,因为对于 CUD 操作,我必须编写 native SQL。
Model.java
package models;
// relevant imports
@entity("view")
public class Model {
// All VIEW + table columns
// All relationships with other models
// custom SQL to insert update or delete
}
最佳答案
如果您的所有表都有相应的 View 对象,我会将您的view 实体指定为具有只读访问权限的模型对象中的一对一关系。你可以通过编写没有 setter 的 getter 来做到这一点,因为触发任何类型的集合然后保存将运行失败的查询。像这样使用继承会使您不得不在一个级别中指定所有列,并且您不知道哪些列属于哪些表或 View 。
Table.java
package models;
// relevant imports
@entity("table")
public class Table{
@OneToOne(mappedBy = "table")
private View view;
public string getVariable();
public string setVaraible();
}
View.java
package models;
// relevant imports
@entity("view")
public class View{
@OneToOne
@JoinColumn(name = "table_id")
private Table table;
public string getVariable();
public string getVariable2();
public string getVariable3();//etc, No setters.
//alternatively use insertable//updateable=false on all column annotation
@Column(name="variable_4", insertable = false, updateable=false)
public string getVariable4();
}
将它们全部集中在模型对象中有点破坏了首先将 ORM 放在那里的对象,因为现在您将不得不编写大量 mysql 代码来匹配 ORM 的基本 CRUD 功能。这将是您的冗余。
如果您以后选择使用继承,此处不使用继承会使继承成为一个实际选项。每次都加入 View 可能对性能不利,当然这取决于您的 View 编写得有多好,但从这个意义上讲,不将它们全部放在同一个对象中可以提供更大的灵 active 。
关于java - 具有继承性的 JPA 映射 View 和表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33352788/
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何
我想要做的是有2个不同的Controller,client和test_client。客户端Controller已经构建,我想创建一个test_clientController,我可以使用它来玩弄客户端的UI并根据需要进行调整。我主要是想绕过我在客户端中内置的验证及其对加载数据的管理Controller的依赖。所以我希望test_clientController加载示例数据集,然后呈现客户端Controller的索引View,以便我可以调整客户端UI。就是这样。我在test_clients索引方法中试过这个:classTestClientdefindexrender:template=>
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我是一个Rails初学者,但我想从我的RailsView(html.haml文件)中查看Ruby变量的内容。我试图在ruby中打印出变量(认为它会在终端中出现),但没有得到任何结果。有什么建议吗?我知道Rails调试器,但更喜欢使用inspect来打印我的变量。 最佳答案 您可以在View中使用puts方法将信息输出到服务器控制台。您应该能够在View中的任何位置使用Haml执行以下操作:-puts@my_variable.inspect 关于ruby-on-rails-如何在我的R
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht