如何在某种服务器上存储大型java对象
我目前有以下问题: 我正在寻找一种在某种服务器上存储大型java对象的合适方法,可以是MySQL数据库或Google应用程序引擎。我已经找到了很多方法来“存储”一个对象,但我正在寻找一些建议,在这种情况下什么是最好的: 案例 我为小企业创建了某种商店管理系统。应用程序的用户可以生成有关例如销售的报告。我想创建保存这些报告的功能,以便以后可以生成这些报告,而无需再次设置所有选项 课程如何在某种服务器上存储大型java对象,java,mysql,json,google-app-engine,serialization,Java,Mysql,Json,Google App Engine,Serialization,我目前有以下问题: 我正在寻找一种在某种服务器上存储大型java对象的合适方法,可以是MySQL数据库或Google应用程序引擎。我已经找到了很多方法来“存储”一个对象,但我正在寻找一些建议,在这种情况下什么是最好的: 案例 我为小企业创建了某种商店管理系统。应用程序的用户可以生成有关例如销售的报告。我想创建保存这些报告的功能,以便以后可以生成这些报告,而无需再次设置所有选项 课程 报告类的布局如下(我排除了getter、setter和list操作符): 公共类报告{ /*属性*/ public
报告
类的布局如下(我排除了getter、setter和list操作符):
公共类报告{
/*属性*/
public IntegerProperty ID=新的SimpleIntegerProperty();
public StringProperty name=new SimpleStringProperty();
公共雇员=空;
public BooleanProperty timeFilterPresent=new simpleboleanproperty();
public StringProperty optionalBasicFilterStatement=new SimpleStringProperty();
/*类别*/
公共报告类别;
公共报告子类别子类别;
/*过滤器*/
public List filters=new ArrayList();
/*观点*/
公共列表视图=新建ArrayList();
public List generatedViews=new ArrayList();
/*询问*/
public List querys=new ArrayList();
/*时间间隔*/
公共列表时间间隔=新建ArrayList();
如您所见,这是一个相当大的类。报告
类中提到的所有其他类也是定制的(例如过滤器
,员工
,报告类别
等)
存储对象的选项
我找到了以下保存此对象的选项:
可序列化
,将对象转换为字节数组并存储在MySQL数据库中
我已经试过了,但是要使所有的子类也可序列化也需要做大量的工作,我甚至不确定在这种情况下是否能正常工作
Gson
将对象转换为JSON
,并将其作为纯文本存储在MySQL数据库中
当我在没有任何调整的情况下尝试此操作时,会出现StackOverflow错误。我可以为此类创建自定义Json转换器,但我也需要为每个子类创建自定义Json转换器。此外,我还必须创建一个从Json
到对象的转换器Blob
非常感谢您的帮助!为什么不简单地使用一个DB Report表,其中的列包含对其他表中的值的外键引用(链接到它们的主键)?您忘记了可序列化的重要缺点-您无法反序列化到同一类的新版本(大多数情况下),所以你将无法进一步开发你的类别/过滤器/等等。实际上你可以做一些小的改进,等等,也许是一些新的领域,但在某些时候它会成为一个问题likely@Igor:yes forgott that.thx for the hint这就是拥有数据库的原因:它是关系型的。关系将存在,并且数据库已优化以进行管理信息技术
public class Report {
/* ATTRIBUTES */
public IntegerProperty ID = new SimpleIntegerProperty();
public StringProperty name = new SimpleStringProperty();
public Employee employee = null;
public BooleanProperty timeFilterPresent = new SimpleBooleanProperty();
public StringProperty optionalBasicFilterStatement = new SimpleStringProperty();
/* Categories */
public ReportCategory category;
public ReportSubcategory subCategory;
/* Filters */
public List<Filter> filters = new ArrayList<>();
/* Views */
public List<ReportView> views = new ArrayList<>();
public List<VBox> generatedViews = new ArrayList<>();
/* Queries */
public List<Query> queries = new ArrayList<>();
/* Time intervals */
public List<TimeInterval> timeIntervals = new ArrayList<>();