编辑 :已 解决
。我发现了令我困惑的事情。我使用pgadmin创建表和其他数据库内部组件,现在检查:如果名称(表名称,列名称,pk名称等)中至少有一个字母是大写字母,则pgadmin在SQL创建脚本中使用它照原样,使用双引号,因此PostgreSQL会按原样解释名称。如果运行以下脚本:
CREATE TABLE SAMPLE
(
ID integer NOT NULL,
TITLE character varying(100) NOT NULL,
CONSTRAINT SAMPLE_ID_PK PRIMARY KEY (ID)
)
WITH (
OIDS=FALSE
);
ALTER TABLE SAMPLE
OWNER TO postgres;_
它以小写形式创建所有内容,原始的Sample.java版本运行良好。
怎么了 这个问题是一般来说针对PostgreSQL 9.1或PostgreSQL的,还是缺少一些hibernate配置?
persistence.xml:
<persistence-unit name="com.sample.persistence.jpa" transaction-type="RESOURCE_LOCAL">
<class>com.sample.persistence.Sample</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:postgresql:sample"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="hibernate.connection.username" value="postgres"/>
<property name="hibernate.connection.password" value="postgres"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
Sample.java :
@Entity
@Table(name = "SAMPLE")
public class Sample {
@Id
@Column(name = "ID")
private long id;
@Column(name = "TITLE")
private String title;
public String getTitle() {
return title;
}
}
PersistenceMain.java:
public class PersistenceMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.sample.persistence.jpa");
EntityManager em = emf.createEntityManager();
Sample sample = em.find(Sample.class, 1l);
System.out.println("Sample Title: " + sample.getTitle());
em.close();
emf.close();
}
}
例外:
...
Hibernate:
select
sample0_.ID as ID0_0_,
sample0_.TITLE as TITLE0_0_
from
SAMPLE sample0_
where
sample0_.ID=?
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not load an entity: [com.sample.persistence.Sample#1]
...
Caused by: org.postgresql.util.PSQLException: ERROR: relation "sample" does not exist
...
显然,上面的此SQL语句:
select
sample0_.ID as ID0_0_,
sample0_.TITLE as TITLE0_0_
from
SAMPLE sample0_
where
sample0_.ID=?
无法从PostgreSQL本身(从pgadmin)成功执行。
但是,如果我将Sample.java更改为:
@Entity
@Table(name = "\"SAMPLE\"")
public class Sample {
@Id
@Column(name = "\"ID\"")
private long id;
@Column(name = "\"TITLE\"")
private String title;
public String getTitle() {
return title;
}
}
这很奇怪,它有效。
Hibernate:
select
sample0_."ID" as ID1_0_0_,
sample0_."TITLE" as TITLE2_0_0_
from
"SAMPLE" sample0_
where
sample0_."ID"=?
Sample Title: Sample
hibernate.dialect是否在这里没有用,或者在PostgreSQL
9.1中不能正常工作?另外,如果列名与字段相同,我也不想键入列名,但是大写也可以吗?
谢谢。
该@Table("\"...\"")
结构是迫使JPA提供商使用你提供确切的值(即使用表名的大小写)。
而且,它在PostgreSQL世界中很相似。如果调用CREATE TABLE
并用引号指定表名,则它将使用您指定的确切名称创建表(不仅是大小写,还包括语义-通过这种方式,您甚至可以创建名为TABLE的表):
CREATE TABLE "TeSt" ( id int PRIMARY KEY NOT NULL )
将产生表 TeSt8 。
CREATE TABLE TeSt2 ( id int PRIMARY KEY NOT NULL )
将产生表 test2 。
因此,要查询“ TeSt”表,您将需要执行SELECT * FROM "TeSt"
( 不是 SELECT * FROM TeSt
)。
因此,如果您创建一个表,则CREATE TABLE "SAMPLE"
需要指定该表@Table(name="\"SAMPLE\"")
才能正常工作。
问题内容: 我以前从未见过这种情况,很奇怪。 我有一个针对的本地SQL Server 2012 Express数据库。使用TestDrive插件运行简单的测试套件,并使用EF v5访问数据库。 我只是运行了一个将记录插入数据库的测试。我的表中有9行,其ID为1-9。下一个插入和ID恰好跳了10000 !!!! Id列为: 我知道插入失败也会增加ID,但我可以保证在测试运行之间的5秒内没有10,00
问题内容: 这是目录树: 在main.go中: 在client_test.go中: 错误: 我已经阅读了如何在golang中使用自定义软件包?而且我认为我有和这个人一样的解决方案,但是我只是不知道如何解决这个问题。请帮忙。 去环境: 问题答案: 命令去,测试包。 名称与文件模式“ * _test.go”匹配的文件可以包含测试函数,基准函数和示例函数。 不要使用保留名称。例如,将与贯穿始终。
因此,在去年与react合作之后,我设法理解了它的功能和注意事项,以及如何避免不必要的渲染。 昨天我在玩一些代码,遇到了一个以前没有看到的问题,有点困惑。 在上面的代码中,我添加了一个简单的计数器,每次单击都会设置一个新的状态,这会导致重新渲染,在屏幕上显示“Count:1”,并在dev工具中显示一个“counter render”日志,就像我预期的那样。 奇怪的部分来自渲染变量,我用数字0启动(
我在Chrome Developer Tools中出现这个错误已经有一段时间了,我似乎就是找不到不安全的http://请求。它指向我的域,但没有https://。http://www.example.com/不是一个脚本,所以我不明白它是从哪里来的。 内容混杂:“HTTPS://www.example.com/categoy/a-product.html”页面是通过HTTPS加载的,但请求的脚本“
我有一个相当基本的登录设置(代码如下),其中一些组件需要身份验证。当我导航到http://localhost:8000/时,它会重定向到http://localhost:8000/login,一切正常。如果我随后登录,它将返回到http://localhost:8000/并显示我的主要组件。 但是,当我直接导航到http://localhost:8000/login时,它显示“不能GET/logi