我已经创建了2个新实体,并且在运行命令'php app / console doctrine:schema:update --dump-sql'时收到消息“没有更新-您的数据库已经与当前实体元数据同步”。
我尝试清除缓存,并删除orm的doctrine文件夹的内容,这是该论坛上的一些建议。仍然没有喜悦。我在配置中使用APC缓存设置,如下所示。
# Doctrine Configuration
doctrine:
dbal:
driver: "%database_driver%"
host: "%database_host%"
port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
charset: UTF8
orm:
auto_generate_proxy_classes: "%kernel.debug%"
auto_mapping: true
metadata_cache_driver: apc
result_cache_driver: apc
query_cache_driver: apc
Run Code Online (Sandbox Code Playgroud) 我将Hibernate 5.0.7与Postgresql DBMS一起使用。一切正常,但我在postgresql数据库中遇到主键问题(负值)。
这是我的代码:
package model;
import javafx.beans.property.*;
import javax.persistence.*;
@Entity
@Table(name = "Product")
@Access(AccessType.PROPERTY)
public class Product {
private LongProperty idProduct;
private StringProperty nameFr;
private DoubleProperty qtyInHand;
private DoubleProperty sellPrice;
public Product() {
idProduct = new SimpleLongProperty();
nameFr = new SimpleStringProperty();
qtyInHand = new SimpleDoubleProperty();
sellPrice = new SimpleDoubleProperty();
}
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_seq_gen")
@SequenceGenerator(name = "product_seq_gen", sequenceName = "product_idproduct_seq")
@Column(name = "idproduct", unique = true, nullable = false)
public Long getIdProduct() {
return idProduct.get();
} …Run Code Online (Sandbox Code Playgroud) 我正在使用:
dd(User::find(1)->get());在一个有4994行的表上,上面的查询返回所有行.但当我这样做时:
User::where('id',1)->with('groups')->get()
,我得到了正确的行(只有一行)
用户表有一个名为id的列,它是主键.
我使用的是Laravel Framework 5.1.31版(LTS)
谁能告诉我问题是什么?
我根本无法解决这个问题,并且有大量的堆栈溢出帖子具有完全相同的错误消息.我已经尝试了所有这些,但仍然无法让它工作.也许我看起来很小.我真的需要帮助,并提前感谢你.
错误信息
Initial EntityManagerFactory creation failed.javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.hibernate.ejb.HibernatePersistence
Exception in thread "main" java.lang.ExceptionInInitializerError
at util.DatabaseUtil.buildSessionFactory(DatabaseUtil.java:18)
at util.DatabaseUtil.<clinit>(DatabaseUtil.java:8)
at Test.main(Test.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.hibernate.ejb.HibernatePersistence
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at util.DatabaseUtil.buildSessionFactory(DatabaseUtil.java:13)
... 7 more
Run Code Online (Sandbox Code Playgroud)
目录结构请忽略hibernate.cfg.xml文件,我尝试使用hibernate sessionFactory并遇到了一个我无法解决的重大错误,并说了它的地狱.加上这个帖子说,JPA是首选

这是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="com.learning.jpa">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.learning.jpa.entities.User</class>
<class>com.learning.jpa.entities.Expense</class>
<class>com.learning.jpa.entities.Category</class>
<properties>
<property name="hibernate.connection.pool_size" value="1"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property …Run Code Online (Sandbox Code Playgroud) Produto.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Produto
*
* @ORM\Table(name="produto")
* @ORM\Entity(repositoryClass="AppBundle\Repository\ProdutoRepository")
*/
class Produto
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="descricao", type="string", length=50)
*/
private $descricao;
/**
* @ORM\ManyToOne(targetEntity="Categoria", inversedBy="produtos")
* @ORM\JoinColumn(name="categoria_id", referencedColumnName="id")
*/
private $categoria;
/**
* @var decimal
*
* @ORM\Column(name="valor", type="decimal", scale=2)
*/
private $valor;
/**
* @var int
*
* @ORM\Column(name="multiplo", type="integer")
*/
private $multiplo;
/** …Run Code Online (Sandbox Code Playgroud) 我正在将来自Hibernate的2500条记录插入到一个完全空的MySQL表中.插件需要5分钟!
我用谷歌搜索了几个小时,尝试了一些像自动生成的主键,但似乎没有什么能改善性能.
我的程序的早期版本是同时进行插入(每个线程1个,大约100个线程),这需要大约2分钟.我认为批处理应该可以将性能提高大约10倍,但它似乎已经适得其反.
我正在使用Google Cloud的MySQL和db-f1-micro实例
这是我的表看起来像(只有数据库中的表!):
CREATE TABLE `categories` (
`browse_node` varchar(60) NOT NULL,
`name` varchar(60) DEFAULT NULL,
`path` varchar(400) DEFAULT NULL,
`url` varchar(200) NOT NULL,
`level` int(11) NOT NULL,
PRIMARY KEY (`browse_node`)
)
Run Code Online (Sandbox Code Playgroud)
这是POJO:
package example.com;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
* Represents a category from the categories table
*/
@Entity
@Table(name = "categories")
public class Category {
@Id
@Column(name = "browse_node")
private String browseNode;
@Column(name = "name")
private String name;
@Column(name …Run Code Online (Sandbox Code Playgroud) 在我目前的go项目(~5K LOC)中,我使用sqlite3作为我的底层数据库层,我使用gorm作为我的ORM引擎.其中一个模型是Platform具有PlatformType枚举类型的字段.这是一个代码片段来演示我的问题.
package main
import (
_ "github.com/jinzhu/gorm/dialects/sqlite"
"github.com/jinzhu/gorm"
"database/sql/driver"
"fmt"
)
/****************************\
Object Layer
\****************************/
// Platform ID
type PlatformID string
func (u *PlatformID) Scan(value interface{}) error { *u = PlatformID(value.([]byte)); return nil }
func (u PlatformID) Value() (driver.Value, error) { return string(u), nil }
// Platform Type enumeration
type PlatformType int
const (
PLATFORM_TYPE_NOT_A_VALUE PlatformType = iota
PLATFORM_TYPE_TYPE1
PLATFORM_TYPE_TYPE2
)
var types = [...]string {
"Not a type",
"Type1",
"Type2",
}
func (platform_type PlatformType) …Run Code Online (Sandbox Code Playgroud) 我想知道是否有一个不同的ORM应该为Symfony实现的接口.
当我构建一个接受ORM(现在是Doctrine)的服务并且想要声明类型时,问题出现了.
我猜不同的ORM有不同的行为和类......在这些情况下,如果想要稍后切换,如何构建不依赖于特定ORM的实体?
我正在使用Entity Framework将数据读/写到DB,并且想知道是否存在一种按类型获取实体的方法。例如:我有Student桌子和Classroom桌子(实际上,我有一堆桌子)。我想使用类型或实体名称来吸引所有学生。基本上,我需要一些通用的东西来从数据库读取数据。
我要解决的方法是使用反射读取DbContext返回的属性IQueryable,但似乎应该有另一种方法。如果是这样,有人可以告诉我该怎么做吗?
我需要这样的东西:
dbContext.GetEntities<T>()
要么
dbContext.GetEntities(Type entityType)
Run Code Online (Sandbox Code Playgroud) 我正在使用MySQL,我有两个模式,并且必须对多个模式执行联接,如您所知,Django ORM 不支持该模式。
因此,这是此方案中最简化的SQL查询
SELECT * FROM db1.a AS a
JOIN db2.b AS b
ON b.some_id = a.id
WHERE a.name = 'localhost'
Run Code Online (Sandbox Code Playgroud)
DJANGO ORM
现在,如果我使用Django ORM,则必须执行类似
a_obj = ModelA.objects.filter(name='localhost')
ModelB.objects.filter(some_id__in=a_obj)
Run Code Online (Sandbox Code Playgroud)
DJANGO RAW SQL /连接
from django.db import connection
sql = 'SELECT * FROM db1.a AS a
JOIN db2.b AS b
ON b.some_id = a.id
WHERE a.name = %s'
cursor = connection.cursor()
try:
cursor.execute(sql, ['localhost'])
row = cursor.fetchall()
except Exception as e:
cursor.close
Run Code Online (Sandbox Code Playgroud)
现在,我知道他们两个都将给我所需的结果。但是,为什么要使用一个?从我的角度来看,Django ORM必须两次命中数据库才能获取所需的信息,而原始查询只需单击一次即可获取,我认为原始查询会胜出。再次,原始查询通过使用参数化查询来防止SQL注入攻击,该参数化查询对变量进行了转义,从而防止了攻击。
很多人建议在原始查询上使用Django …