Hibernate错误java.lang.NoSuchMethodError(Hibernate Error java.lang.NoSuchMethodError)
我使用Jersey作为休息Web服务和Hibernate实体管理器来坚持JPA模型。 我使用Tomcat 8作为容器。
这是persistence.xml文件的内容:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="manager1" transaction-type="JTA"> <properties> <!--PostgreSQL--> <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postgres"/> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.connection.username" value="postgres"/> <property name="hibernate.connection.password" value="postgres"/> <property name="hibernate.archive.autodetection" value="class"/> <property name="hibernate.id.new_generator_mappings" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.ejb.metamodel.generation" value="disabled"/> <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultComponentSafeNamingStrategy"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>
我的休息电话很简单:
@GET @Path("/") public Response test() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1"); return Response.status(Response.Status.OK).build(); }
这里是我的web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Restful Web Application</display-name> <servlet> <servlet-name>jersey-serlvet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>ca.products.services</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-serlvet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
但它给了我这个错误:
type Rapport d''exception message java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(Lorg/hibernate/boot/spi/MetadataBuildingOptions;)V description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête. exception javax.servlet.ServletException: java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(Lorg/hibernate/boot/spi/MetadataBuildingOptions;)V com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) cause mère java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(Lorg/hibernate/boot/spi/MetadataBuildingOptions;)V org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.generateDefaultReflectionManager(MetadataBuilderImpl.java:736) org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.<init>(MetadataBuilderImpl.java:709) org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:127) org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:135) org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:185) org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34) org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165) org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:114) org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71) org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) ca.products.services.RestServices.test(RestServices.java:42) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:497) com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
我无法弄清楚问题在哪里! 任何帮助?
如建议,这里是mvn依赖项:树日志:
[INFO] ca.products.jpa_module:jpa_module:jar:1.0-SNAPSHOT [INFO] +- org.hibernate:hibernate-core:jar:5.0.7.Final:compile [INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile [INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] | +- org.javassist:javassist:jar:3.18.1-GA:compile [INFO] | +- antlr:antlr:jar:2.7.7:compile [INFO] | +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile [INFO] | +- org.jboss:jandex:jar:2.0.0.Final:compile [INFO] | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile [INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile [INFO] +- org.hibernate:hibernate-annotations:jar:3.5.6-Final:compile [INFO] | +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile [INFO] | \- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile [INFO] +- org.hibernate:hibernate-search-orm:jar:5.5.2.Final:compile [INFO] | \- org.hibernate:hibernate-search-engine:jar:5.5.2.Final:compile [INFO] | +- org.apache.lucene:lucene-core:jar:5.3.1:compile [INFO] | +- org.apache.lucene:lucene-backward-codecs:jar:5.3.1:compile [INFO] | +- org.apache.lucene:lucene-misc:jar:5.3.1:compile [INFO] | +- org.apache.lucene:lucene-analyzers-common:jar:5.3.1:compile [INFO] | \- org.apache.lucene:lucene-facet:jar:5.3.1:compile [INFO] | \- org.apache.lucene:lucene-queries:jar:5.3.1:compile [INFO] +- org.hibernate:hibernate-entitymanager:jar:5.0.7.Final:compile [INFO] +- org.hibernate:hibernate-ehcache:jar:5.0.7.Final:compile [INFO] | \- net.sf.ehcache:ehcache-core:jar:2.4.3:compile [INFO] +- com.google.inject.extensions:guice-assistedinject:jar:4.0:compile [INFO] | \- com.google.inject:guice:jar:4.0:compile [INFO] | +- javax.inject:javax.inject:jar:1:compile [INFO] | +- aopalliance:aopalliance:jar:1.0:compile [INFO] | \- com.google.guava:guava:jar:16.0.1:compile [INFO] +- com.google.inject.extensions:guice-persist:jar:4.0:compile [INFO] +- log4j:log4j:jar:1.2.17:compile [INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile [INFO] +- org.slf4j:slf4j-api:jar:1.7.12:compile [INFO] \- commons-logging:commons-logging:jar:1.1.1:compile
I'm using Jersey as Rest web service and Hibernate entity manager to persist JPA models. and I'm using Tomcat 8 as container.
Here is the content of the persistence.xml file :
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" version="2.0"> <persistence-unit name="manager1" transaction-type="JTA"> <properties> <!--PostgreSQL--> <property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/> <property name="hibernate.connection.url" value="jdbc:postgresql://localhost:5432/postgres"/> <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> <property name="hibernate.connection.username" value="postgres"/> <property name="hibernate.connection.password" value="postgres"/> <property name="hibernate.archive.autodetection" value="class"/> <property name="hibernate.id.new_generator_mappings" value="true"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.ejb.metamodel.generation" value="disabled"/> <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.DefaultComponentSafeNamingStrategy"/> <property name="hibernate.show_sql" value="true"/> </properties> </persistence-unit> </persistence>
And my Rest call is as simple as this :
@GET @Path("/") public Response test() { EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1"); return Response.status(Response.Status.OK).build(); }
and here is my web.xml file
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <display-name>Restful Web Application</display-name> <servlet> <servlet-name>jersey-serlvet</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>ca.products.services</param-value> </init-param> <init-param> <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-serlvet</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
But it gives me this error :
type Rapport d''exception message java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(Lorg/hibernate/boot/spi/MetadataBuildingOptions;)V description Le serveur a rencontré une erreur interne qui l''a empêché de satisfaire la requête. exception javax.servlet.ServletException: java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(Lorg/hibernate/boot/spi/MetadataBuildingOptions;)V com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) cause mère java.lang.NoSuchMethodError: org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.<init>(Lorg/hibernate/boot/spi/MetadataBuildingOptions;)V org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.generateDefaultReflectionManager(MetadataBuilderImpl.java:736) org.hibernate.boot.internal.MetadataBuilderImpl$MetadataBuildingOptionsImpl.<init>(MetadataBuilderImpl.java:709) org.hibernate.boot.internal.MetadataBuilderImpl.<init>(MetadataBuilderImpl.java:127) org.hibernate.boot.MetadataSources.getMetadataBuilder(MetadataSources.java:135) org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:185) org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:34) org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:165) org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:114) org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:71) org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:52) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:48) javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32) ca.products.services.RestServices.test(RestServices.java:42) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:497) com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288) com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469) com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349) com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339) com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537) com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:708) javax.servlet.http.HttpServlet.service(HttpServlet.java:729) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
I was not be able to figure out where is the problem !! any help ?
as suggested, here is the mvn dependency:tree log :
[INFO] ca.products.jpa_module:jpa_module:jar:1.0-SNAPSHOT [INFO] +- org.hibernate:hibernate-core:jar:5.0.7.Final:compile [INFO] | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile [INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] | +- org.javassist:javassist:jar:3.18.1-GA:compile [INFO] | +- antlr:antlr:jar:2.7.7:compile [INFO] | +- org.apache.geronimo.specs:geronimo-jta_1.1_spec:jar:1.1.1:compile [INFO] | +- org.jboss:jandex:jar:2.0.0.Final:compile [INFO] | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | \- xml-apis:xml-apis:jar:1.0.b2:compile [INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile [INFO] +- org.hibernate:hibernate-annotations:jar:3.5.6-Final:compile [INFO] | +- org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile [INFO] | \- org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile [INFO] +- org.hibernate:hibernate-search-orm:jar:5.5.2.Final:compile [INFO] | \- org.hibernate:hibernate-search-engine:jar:5.5.2.Final:compile [INFO] | +- org.apache.lucene:lucene-core:jar:5.3.1:compile [INFO] | +- org.apache.lucene:lucene-backward-codecs:jar:5.3.1:compile [INFO] | +- org.apache.lucene:lucene-misc:jar:5.3.1:compile [INFO] | +- org.apache.lucene:lucene-analyzers-common:jar:5.3.1:compile [INFO] | \- org.apache.lucene:lucene-facet:jar:5.3.1:compile [INFO] | \- org.apache.lucene:lucene-queries:jar:5.3.1:compile [INFO] +- org.hibernate:hibernate-entitymanager:jar:5.0.7.Final:compile [INFO] +- org.hibernate:hibernate-ehcache:jar:5.0.7.Final:compile [INFO] | \- net.sf.ehcache:ehcache-core:jar:2.4.3:compile [INFO] +- com.google.inject.extensions:guice-assistedinject:jar:4.0:compile [INFO] | \- com.google.inject:guice:jar:4.0:compile [INFO] | +- javax.inject:javax.inject:jar:1:compile [INFO] | +- aopalliance:aopalliance:jar:1.0:compile [INFO] | \- com.google.guava:guava:jar:16.0.1:compile [INFO] +- com.google.inject.extensions:guice-persist:jar:4.0:compile [INFO] +- log4j:log4j:jar:1.2.17:compile [INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile [INFO] +- org.slf4j:slf4j-api:jar:1.7.12:compile [INFO] \- commons-logging:commons-logging:jar:1.1.1:compile
原文:https://stackoverflow.com/questions/38407235
最满意答案
我建议采用第一种方法 - 创建一个新的分区表并将其插入其中 - 因为它使您可以比较新旧表格。 您可以针对两种表格样式测试查询计划,并在切换到新表格设计之前查看您的查询是否确实速度更快。 您可能会发现没有任何改进,或者在决定最终结果之前,您可能需要尝试几种不同的分区功能/方案。 您可能想要划分日期范围以外的其他内容 - 日期并不总是有效。
我已经完成了300-500米行表的分区,数据分布在6 - 7年之间,而表插入方法是我发现最有用的方法。
你问过如何分区 - 最好的答案是尝试设计你的分区,这样你的查询就会碰到一个分区。 如果您倾向于将注意力集中在最近的数据上,并且如果您在where子句中的日期字段上进行筛选,那么是的,在最近X天有一个单独的分区。
请注意,您必须在where子句中指定分区字段。 如果您没有指定该字段,那么查询可能会触及每个分区以获取数据,并且此时您不会有任何性能提升。
希望有所帮助! 我做了很多分区,如果你想发布一些表结构和查询的例子,这将帮助你为你的环境获得更好的答案。
I'd recommend the first approach - creating a new partitioned table and inserting into it - because it gives you the luxury of comparing your old and new tables. You can test query plans against both styles of tables and see if your queries are indeed faster before cutting over to the new table design. You may find there's no improvement, or you may want to try several different partitioning functions/schemes before settling on your final result. You may want to partition on something other than date range - date isn't always effective.
I've done partitioning with 300-500m row tables with data spread over 6-7 years, and that table-insert approach was the one I found most useful.
You asked about how to partition - the best answer is to try to design your partitions so that your queries will hit a single partition. If you tend to concentrate queries on recent data, AND if you filter on that date field in your where clauses, then yes, have a separate partition for the most recent X days.
Be aware that you do have to specify the partitioned field in your where clause. If you aren't specifying that field, then the query is probably going to hit every partition to get the data, and at that point you won't have any performance gains.
Hope that helps! I've done a lot of partitioning, and if you want to post a few examples of table structures & queries, that'll help you get a better answer for your environment.
相关问答
更多-
RCU和WCU(读/写容量单位)总是在所有分区之间平均分配。 所以,要回答你的问题,你最终会得到2个分区,每个分区分别有250个RCU和WCU。 RCUs and WCUs (Read/Write Capacity Units) are always equally divided among all partitions. So, to answer your question, you'll end up with 2 partitions, each with 250 and 25 RCUs and ...
-
我的SQL表分区(My SQL Table Partitions)[2021-05-26]
如果你想创建5个分区,你应该使用: alter table rnds partition by HASH(id) partitions 5; 此命令将创建5个分区,并将根据ID将新行添加到它们中。 不会自动创建新分区。 您可以使用ADD PARTITION命令添加新分区。 请参阅此链接了解详情。 If you want create 5 partitions you should use: alter table rnds partition by HASH(id) partitions 5; This ... -
如何使用SQL合并拆分数据(How to merge split data with SQL)[2022-07-15]
您可以使用XML功能将分隔的字符串拆分为各个列,而不是先拆分为行: ;WITH cte AS (SELECT testString = 'test,1,2,3' UNION SELECT 'test,2,3,4' UNION SELECT 'test,5,6,7') ,SplitString AS (SELECT *, CONVERT(XML,'' ... -
朋友表最好的方法(friends table best approach)[2024-02-19]
由于每个人都可以与另一个人成为朋友,因此您需要实现NxM(多对多)关系。 在关系数据库管理系统中,在另一个表中转换为“联结”,正如您所做的那样。 http://weblogs.asp.net/zeeshanhirani/archive/2008/08/21/many-to-many-mappings-in-entity-framework.aspx 在您的示例中,您可能想要添加一列来了解谁向其他人询问了友情。 编辑:我可能会删除fId列并创建列(外键)personA和personB的组合主键。 这样,db就 ... -
HIVE“show partitions”命令不显示正确的分区(HIVE “show partitions” command do not show correct partitions)[2023-08-08]
Truncate删除表的数据文件。 它不会从Metastore中删除分区定义。 它不会删除文件系统目录。 演示 hive> create table mytable (i int) partitioned by (p int); OK hive> insert into mytable partition (p) values (1,10),(2,10),(3,20),(4,30),(5,30),(6,30); OK hive> select * from mytable; OK mytable.i ... -
我的SQL分区建议(MY SQL Partitioning advice)[2022-09-30]
因此,对于可能对此主题感兴趣的任何人,以下是我的经验: 我们最终决定不使用MYSQL分配而是使用数据库分片。 原因是:无论你实现分割有多好,仍然需要在需要时将数据编入索引并将其带入内存,对于处理多达500,000个用户电子邮件的系统,这可以简单地成为主要硬件当人们接收邮件时会发出问题并强迫您购买更昂贵的硬件。 MYSQL中还有另一个隐藏的成本,即改变表格模式,如果你有一个大表和有限的资源,这可能变得不可能。 在真实场景中使用MSSQL和Oracle后,我对MYSQL处理元数据更新和索引的方式印象不深。 因此 ... -
表分区的SQL拆分/合并:实现的最佳方法是什么?(SQL split/merge of table partitions: What is the best approach to implement?)[2023-07-12]
我建议采用第一种方法 - 创建一个新的分区表并将其插入其中 - 因为它使您可以比较新旧表格。 您可以针对两种表格样式测试查询计划,并在切换到新表格设计之前查看您的查询是否确实速度更快。 您可能会发现没有任何改进,或者在决定最终结果之前,您可能需要尝试几种不同的分区功能/方案。 您可能想要划分日期范围以外的其他内容 - 日期并不总是有效。 我已经完成了300-500米行表的分区,数据分布在6 - 7年之间,而表插入方法是我发现最有用的方法。 你问过如何分区 - 最好的答案是尝试设计你的分区,这样你的查询就会碰 ... -
分区和子分区(partitions and sub partitions)[2023-01-20]
与您的断言相反,第一个表无错误地工作,将示例数据插入其中: INSERT INTO `ox_data_archive_20120108` VALUES (1, 2, 3, '2012-01-31 04:10:03'); 导致与第二个表相同的错误。 错误中给出的值(734898)恰好是to_days('2012-01-31') 。 您收到此错误的原因是您在2010年1月1 日至3日期间只有分区。示例数据的日期和年份都在定义的分区之外。 而不是TO_DAYS (返回从第0年到给定日期的天数),您可能想要DAY ... -
JPA或任何其他ORM框架本身不支持Oracle分区表(至少在我的知识中)。 但是,根据问题的性质,有不同的可能解决方案: 重构您的类,以便在现实生活中需要区别对待的数据属于单独的类。 有时这称为垂直分区(跨行而不是跨列获取分区)。 使用下面的Oracle分区表并使用JPA中的本机SQL查询或存储过程。 这只是一个可能的解决方案(我没有尝试过)。 使用Hibernate Shards 。 虽然Hibernate Shards的典型用例不适用于单个数据库,但它向应用程序开发人员提供了分布式数据库的单一视图。 ...
-
你最有可能让事情变得更糟 你会创造更多的磁头移动 你添加分区开销 我建议的是什么 添加更多卷(SAN,NAS,RAID等) 确保你有足够的RAM来缓解糟糕的IO 这让我觉得...... 备份怎么样? 你有他们吗? 在同一个驱动器上? 是单驱动盘中的“驱动器”......? You'll make things worse most likely you'll create a lot more disk head movement you add the partition overhead What I' ...