我们正在以模块化的方式开发Spring,Hibernate和Maven的Web应用程序.有定义数据访问和查看特定内容的核心项目,然后有定义逻辑和实体的模块(@Entity)然后是定义控制器和视图的Web应用程序.
现在我们有一个安全模块定义了帐户和角色等安全实体,我们有一个原型模块定义了一些示例实体,如客户和订单.两者都有一个PersistenceUnit定义的内部a persistence.xml,除了PersistenceUnit名称之外几乎是空的,因为所有数据库配置都是在带有datasource.xml的web应用程序中完成的.Web应用程序应该将两个jar加载为maven依赖项.
这两个项目都可以构建好的,自动扫描所有实体并为各自的单元测试创建它们.如果单独添加,它们也将成功加载到Web应用程序中.
但是,只要两者同时加载,第二个将覆盖PersistenceUnit第一个,从而IllegalArgumentException : Not an entity为第一个实体创建一个.如果两个项目都有不同的持久性单元,加载Web应用程序将抛出另一个异常,说明已no single default persistence unit定义.
那么..我怎样才能@Entity在我的网络应用程序中加载所有带注释的类而不必在里面定义它们persistence.xml(比如这里),而是通过组件扫描?
这似乎是一个想法,虽然我不知道如何使用和测试它...
我想我们要么必须在Web应用程序中合并所有PersistenceUnits,要么以编程方式加载所有实体.在persistence.xml中定义硬编码不是我们的选择.
请看这行代码.这是一个存储过程的调用,它返回一个ObjectResult<long?>.为了提取长值,我添加了Select:
dbContext.FindCoursesWithKeywords(keywords).Select(l => l.Value);
Run Code Online (Sandbox Code Playgroud)
基于intellisense,这个Select返回IEnumerable<long>.
我不确定我是否在某处读过它或者只是习惯了这个假设 - 我一直认为当EF API返回IEnumerable(而不是IQueryable)时,这意味着结果已经实现.意味着他们已从数据库中撤出.
我今天发现我错了(或者这可能是个错误?).我一直收到错误
"不允许新事务,因为会话中还有其他线程在运行"
基本上,此错误告诉您在db阅读器仍在读取记录时尝试保存更改.
最终我通过(我认为是一个长镜头)解决了这个问题并增加ToArray()了实现IEnumerable<long>......
那么 - 底线 - 我应该期望IEnumerableEF的结果包含尚未实现的结果吗?如果是,那么有没有办法知道一个IEnumerable是否已实现?
如果这是'duhhh'问题之一,感谢并道歉...... :)
我刚刚开始将一个应用程序从原始ADO.NET和嵌入式SQL转换为Entity.我遇到了应用程序使用的其中一个视图的问题.视图没有主键,也没有唯一标识行的列(或列组合).这是选择创建视图:
SELECT
filingmonth,
CEIL(filingmonth / 3),
licnum,
filingyear,
DECODE(GROUPING(insurername), '1', '- All Insured -', insurername),
insurername,
policylinecode,
linedescription,
SUM(NVL(grosspremium, 0)),
SUM(DECODE(taxexempt, 1, grosspremium, 0)),
TRUNC(
CASE
WHEN
(
b.rsn IS NOT NULL
OR A.zeroreport = 1
)
AND b.datereceived IS NULL
THEN A.datereceived
ELSE b.datereceived
END),
SUM(aip.iscompanyadmitted(b.naiccocode, b.naicalienid)),
A.insuredid
FROM
aip.slbtransinsured A
LEFT OUTER JOIN aip.slbtransinsurer b
ON
A.insuredid = b.insuredid
LEFT OUTER JOIN aip.slblinecodes C
ON
b.policylinecode = C.linecode
WHERE
A.submitted = 1
AND A.entryincomplete = 0
GROUP BY …Run Code Online (Sandbox Code Playgroud) 实体框架非常慢,所以我尝试使用存储过程,但我遇到了这个问题.
实体框架允许您定义生成实体的存储过程.但是,我的实体具有"导航属性",使用此方法时未填充这些属性.
有工作吗?
我有类似的问题和关注如何在Web服务返回的Hibernate实体和数据传输对象之间进行转换,如本问题所述:
这里提到的一个因素是,如果域模型发生变化,一组DTO将在Web服务的情况下保护消费者.
即使它似乎会为我的项目添加大量代码,但这种推理似乎是合理的.
有没有一个好的设计模式可以用来将Hibernate实体(实现接口)转换为实现相同接口的DTO?
因此,假设以下两个实现'Book',我需要将BookEntity.class转换为BookDTO.class,以便我可以让JAXB序列化并返回.
同样,这整个前景对我来说似乎都很可疑,但如果有很好的模式来帮助处理这种转换,我很乐意获得一些见解.
是否有一些有趣的方式通过反射转换?还是一个我没想过的"建设者"模式?
我应该忽略DTO模式并传递实体吗?
说我有一个java bean /一个有100个字段的实体(在这种情况下继承或不相关).更新操作后 - 在事务中,我想确定修改哪些字段以跟踪CVS等更新.最简单的方法是什么?任何框架建议?我应该制作这个对象的两个实例并迭代所有字段并匹配字段的值吗?在这种情况下,最好的等于方法怎么样呢?以下equals()似乎很尴尬:
return (field1.equals(o.field1)) &&
(field2.equals(o.field2)) &&
(field3.equals(o.field3)) &&
...
(field100.equals(o.field100));
Run Code Online (Sandbox Code Playgroud) 我的表:
产品:id,名称
优惠:id,value,product_id
实体:
@Entity
@Table(name="product")
public class Product implements Serializable {
@OneToMany(mappedBy="product")
private Set<Offer> offers;
...
}
@Entity
@Table(name="offer")
public class Offer implements Serializable {
@ManyToOne
@JoinColumn(name="PRODUCT_ID")
private Product product;
...
}
Run Code Online (Sandbox Code Playgroud)
当我尝试从表中获取一些数据时Product,我得到一个java.lang.NullPointerException,并且这段代码:product.getOffers()返回:
{IndirectSet:未实例化}
如何解决这个问题?
我试图通过执行使用对象User和Person填充数据库
坚持和冲洗.
首先,我正在创建Person对象并持久化并刷新它:
$person->setFirstname($enquiry->getFirstname());
$person->setLastname($enquiry->getLastname());
$person->setLastname($enquiry->getLastname());
$person->setSex($enquiry->getSex());
$person->setEmail($enquiry->getEmail());
$person->setAddress1($enquiry->getAddress1());
$person->setAddress2($enquiry->getAddress2());
$person->setCity($enquiry->getCity());
$person->setZipcode($enquiry->getZipcode());
$country = $em->getRepository('SciForumVersion2Bundle:Country')->findOneById($enquiry->getCountry());
$person->setCountry($country);
$em->persist($person);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
然后是我的User对象:
$user->setEmail($enquiry->getEmail());
$user->setPassword($enquiry->getPassword());
$user->setPersonId($person->getId());
$user->setDegree($enquiry->getDegree());
$user->setSex($enquiry->getSex());
$user->setOrganization($enquiry->getOrganization());
$user->setTelephone($enquiry->getTelephone());
$user->setFax($enquiry->getFax());
$user->setWorkplace($enquiry->getWorkplace());
$user->setJobtype($enquiry->getJobtype());
$user->setResearchField($enquiry->getResearchField());
$user->setManageConference(0);
$user->setIp( $IP);
$user->setStatus( 0 );
$user->setDateRegistered( time() );
$em->persist($user);
$em->flush();
Run Code Online (Sandbox Code Playgroud)
但是当尝试flush()用户对象的持久性时,我收到错误:
Warning: spl_object_hash() expects parameter 1 to be object, string given in /home/milos/workspace/conference2.0/vendor/doctrine/lib/Doctrine/ORM/UnitOfWork.php line 1095
Run Code Online (Sandbox Code Playgroud)
以下是entier的日志:
Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
Notified event "kernel.request" to listener …Run Code Online (Sandbox Code Playgroud) 我有一个使用hibernate映射到postgres数据库的模型类.我的模型类是:
@Entity
@Table(name="USER")
public class User {
@Id
@GeneratedValue
@Column(name="id")
private long id;
@Column(name="username", unique=true)
private String username;
@Column(name="email")
private String email;
@Column(name="created")
private Timestamp created;
public User(long id, String username, String email) {
this.id = id;
this.username = username;
this.email = email;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下查询检索用户名为"adam"的用户:
tx = session.beginTransaction();
TypedQuery<User> query = session.createQuery("FROM User u WHERE u.username = :username", User.class).setParameter("username", "adam");
user = query.getSingleResult();
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,说:
org.postgresql.util.PSQLException: ERROR: column user0_.id does not exist
Run Code Online (Sandbox Code Playgroud)
我的bash shell数据库如下所示:
hibernate如何将类属性映射到表列?它是基于@Column(name="username")唯一匹配还是根据数据类型和约束(例如唯一/自动增量)尝试匹配?
我首先使用MVC.NET web api,EF和DB,我在上下文中关闭了延迟加载.即使关闭了LazyLoading,EF也会返回过多的数据.
例如,我有一个角色的用户.当我查询用户和包含角色时,Role.Users属性会自动填充数据,因为用户已加载到上下文中.
为什么我不能让EF给我刚刚要求的东西?或者我在这里错过了一些大事?
public partial class User
{
public int UserID { get; set; }
public string Title { get; set; }
public string Email { get; set; }
public int RoleID { get; set; }
....
public virtual Role Role { get; set; }
}
public partial class Role
{
public int RoleID { get; set; }
public string RoleName { get; set; }
....
public virtual ICollection<User> Users { get; set; }
}
return db.Users.Include(u => …Run Code Online (Sandbox Code Playgroud) entity ×10
java ×4
hibernate ×3
jpa ×3
c# ×2
frameworks ×2
.net ×1
annotations ×1
database ×1
doctrine-orm ×1
ienumerable ×1
iqueryable ×1
javabeans ×1
one-to-many ×1
oracle ×1
postgresql ×1
sql ×1
symfony ×1