我正在开发Web应用程序。我们在项目中将Hibernate用作ORM。实际上,我们的应用程序根据用户选择动态创建一些表。用户可以选择表名,列名,然后可以从csv文件导入数据。所以我的问题是:如何用Hibernate和Java对象映射此动态创建的表?
它可以动态完成,但有些混乱:
在建立SessionFactory之前,您需要动态更改Hibernate的Configuration对象。如果您使用的是Spring,则可以通过覆盖;的postProcessAnnotationConfiguration()
方法来完成AnnotationSessionFactoryBean
。否则,您只需要在调用buildSessionFactory()
它之前使用Configuration对象即可完成此操作。
如果您需要在不重新启动应用程序的情况下执行此操作,则可以查看是重建SessionFactory(这意味着您的用户将不得不等到完成此操作),或者使用专门用于自定义类的单独SessionFactory实例(这几乎是不可能的)如果您的自定义类需要引用您的内置类)。
您可以通过访问类/表映射configuration.getMappings()
。然后,您需要通过Table
API
创建一个新的表映射,并通过将其添加到配置中addTable()
。代表类映射的PersistentClass必须做同样的事情。如果您使用同一类表示多个实体(例如,映射多个表),请确保为每个实体使用唯一的实体名称。每次重新启动应用程序时,都必须执行此操作(更改配置)。
我编写了一个映射,如下所示: 当我运行应用程序时,会出现如下错误: 2012-05-15 17:12:38,651--WARN--失败的模式语句:创建表雇员(Id整数不为空auto_increment,版本日期时间不为空,FirstName nvarchar(300),LastName nvarchar(300),雇员类型nvarchar(300),主键(Id),唯一(firstName,last
b)对Employee类中的ReferencedColumnName='department id'使用@ManyToOne和@JoinColumn。 建议采用哪种方法?还是这两种方法用于完全不同的问题?
问题内容: 我对使用关系数据库还很陌生,所以我更喜欢使用一个好的ORM来简化事情。我花时间评估了不同的Python ORM,我认为我需要SQLAlchemy。但是,我已经陷入了精神上的死胡同。 我需要创建一个新表,以与在应用程序的播放器表中创建的播放器的每个实例一起使用。我想我知道如何通过元数据更改表的名称然后调用create函数来创建表,但是我不知道如何将其映射到新的动态类。 有人可以给我一些提
null 帮我处理一下这种情况吧。谢谢你。
假设我有一组字符串和一个散列函数(或任何单边函数)和一个测试函数。我想用Java8流创建一个从输入字符串到通过测试函数的哈希值的映射。我的问题是如何在中编写? 看来老的for循环是最简洁的解决方案。
到目前为止我得到的是: 知道我做错了什么吗?谢谢!