小编Dat*_*eus的帖子

为什么Hibernate选择两次相同的列?

Hibernate: 
    /* load entities.Department */ select
        department0_.name as name4_0_,
        department0_.id as id4_0_ 
    from
        J_DEPT department0_ 
    where
        department0_.name=?
Hibernate: 
    /* load one-to-many entities.Department.employees */ select
        employees0_.dept as dept4_1_,
        employees0_.id as id1_,
        employees0_.id as id5_0_,
        employees0_.dept as dept5_0_,
        employees0_.name as name5_0_ 
    from
        J_EMP employees0_ 
    where
        employees0_.dept=?
Run Code Online (Sandbox Code Playgroud)

请注意,IDDEPT列选择两次.

@Entity
@Table(name = "J_EMP")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mySeq")
    @SequenceGenerator(name = "mySeq", sequenceName = "CNTRY_SEQ")
    private Long id;
    private String name;

    @ManyToOne
    @JoinColumn(name = "dept") …
Run Code Online (Sandbox Code Playgroud)

java orm hibernate

5
推荐指数
1
解决办法
2076
查看次数

如何加载Hibernate import.sql?

数据库表已成功创建

<property name="hibernate.hbm2ddl.auto" value="create"/>"
Run Code Online (Sandbox Code Playgroud)

在persistence.xml中,但是每次运行我的应用程序时(在Eclipse Helios中),import.sql似乎都没有加载.我的persistence.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<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/ ... ce_2_0.xsd" version="2.0">
<persistence-unit name="myPersistenceUnit">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create"/>

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost/svrmonitor4" />
<property name="hibernate.connection.username" value="username" />
<property name="hibernate.connection.password" value="password" />

</properties>   
</persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

使用import.sql的内容我尝试删除换行符,+没有半冒号";",在命令行上测试SQL(插入语句工作),尝试故意破坏SQL(在控制台上不产生错误).我试过在我的类路径的根目录下放置import.sql,也在META-INF中放置(仍然没有运气).我试过放"USE svrmonitor4;" 在import.sql文件的开头(再次,没有运气).

我在persistence.xml中遗漏了什么?

如果在插入MySQL数据库时遇到错误,报告的错误在哪里?Eclipse控制台或MySQL日志?我还没有看过MySQL日志.

在Eclipse中,我有三个项目,依赖项如下:

项目A(包含启动应用程序的主类) - >项目B - >项目C(包含实体类,persistence.xml)

我尝试将import.sql放在每个项目的类路径中,但没有区别.

eclipse hibernate

5
推荐指数
1
解决办法
9627
查看次数

是否可以查看/优化Hibernate查询计划?

Hibernate中是否有一些工具可用于查询查询的查询计划?我可以查看源代码并跟踪连接和急切的提取,并希望我不会错过任何,或者我可以查看SQL日志并尝试将SQL语句与其源匹配,但我想知道是否存在是一种更快的方式.例如,我可以想象一个显示相关类的对象图或带有某种测序符号的ER图.

performance hibernate

5
推荐指数
1
解决办法
2371
查看次数

Hibernate Criteria Query 添加了一个额外的 order by 子句

我有一个带有投影和转换器的 DetachedCriteria 查询,如下所示

criteria = DetachedCriteria.forClass(Report.class, "r");
criteria
.createAlias("template", "t")
.createAlias("constituents", "c")
.setProjection(
        Projections.projectionList()
.add(Projections.property("r.reportId").as("reportId"))
.add(Projections.property("r.reportNm").as("reportNm"))
.add(Projections.property("t.templateNm").as("templateNm"))
.add(Projections.property("t.templateTyp").as("templateTyp"))
).setResultTransformer(Transformers.aliasToBean(ReportSummary.class));
Run Code Online (Sandbox Code Playgroud)

然后我从会话中获取 Citeria,现在当我尝试动态添加 orderBy 子句时,即

Session session = entityManager.unwrap(Session.class);
Criteria c = criteria.getExecutableCriteria(session);
Order order = sortDirection.equals("ASC")?
Order.asc(orderByColumnName):Order.desc(orderByColumnName);
c.addOrder(order);
Run Code Online (Sandbox Code Playgroud)

生成的查询包含一个额外的 orderBy 子句,即

order by reportId ASC(NOT REQUIRED ADDED AUTOMATICALLY), order by reportNm ASC
Run Code Online (Sandbox Code Playgroud)

有人可以指导我解决问题吗

hibernate

5
推荐指数
0
解决办法
676
查看次数

如何调试JPA CriteriaBuilder查询

如何调试使用JPA 2.0 CriteriaBuilder?构建的查询?有没有办法打印出正在执行的查询?

我使用的开发Web应用程序NetBeans,MySql,GlassFish.我会避免在调试模式下启动MySql,因为它也用于其他应用程序.JPA提供商是EclipseLink.

java mysql jpa eclipselink criteria-api

5
推荐指数
1
解决办法
8905
查看次数

如何使用@Formula(在Hibernate中)引用相同的(当前)对象

我有这门课

@Entity
@Table(name = "DB.APPL_SESSION")
@AttributeOverrides({@AttributeOverride(name = "id", column = @Column(name = "APPL_SESSION_ID"))})
@SequenceGenerator(name = "TableSequence", sequenceName = "DB.APPL_SESSION_SQ")

public class AiSession{

@Formula("(select sum(nvl(budg.AMT_OV,budg.AMT)) from DB.BUDGET budg where budg.APPL_SESSION_ID = APPL_SESSION_ID)")
private LocalDate realSessionStartDate;
Run Code Online (Sandbox Code Playgroud)

在上面的公式中,我使用DB.BUDGET对象和当前对象id(APPL_SESSION_ID).但现在我只想使用AidApplicantYearSession类中的下一个成员变量(StartDate)

@Basic
@Temporal(TemporalType.DATE)
@Column(name = "START_OV_DT")
private Date overrideStartDate;
Run Code Online (Sandbox Code Playgroud)

我应该如何编写一个看起来像上面的公式,但只使用对象的成员变量?我想出来了

 @Formula("(select START_OV_DT from DB.APPL_SESSION)")
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?这两个公式的逻辑完全不同.

orm hibernate formula

5
推荐指数
1
解决办法
2万
查看次数

如何让Hibernate Filters在JPA中工作?

我有以下实体类:


@Entity
@FilterDef (name = "byLastName", parameters = @Parameter (name = "lastName", type="string"))
@Filters ({
    @Filter (name = "byLastName", condition = "lastName = :lastName")
})
public class User {
    String firstName;
    String lastName;
}
Run Code Online (Sandbox Code Playgroud)

在我的DAO中,我这样做:


public User findById (Long id)
{
   Session s = (Session) em.getDelegate ( );
   s.enableFilter ("byLastName").setParameter ("lastName", "smith");

   User u = em.find (User.class, id);
   return (u);
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我正确理解了这一点,那么应该应用过滤器,如果lastName不等于"smith",我尝试检索的任何用户都应该返回null.问题是过滤器似乎没有应用.我尝试从数据库中检索的任何用户,无论lastName的值是什么,都会被返回.

我误解过滤器是如何工作的吗?或者我错过了我如何配置的内容?请注意,我没有使用hibernate.cfg.xml; 使用JPA和注释为我配置了所有内容.

任何帮助将不胜感激.

谢谢.

hibernate hibernate-annotations

5
推荐指数
1
解决办法
6352
查看次数

列类型的奇怪Hibernate异常

我得到Hibernate异常:

错误的列类型.发现:位,预期:BOOLEAN DEFAULT TRUE

我有班级用户:

package mypackage;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Table(name = "USER")
public class User {

   @Id
   @GeneratedValue
   @Column(name = "ID", unique = true, nullable = false)
   private Long id;

   @Column(name = "STATUS", columnDefinition = "BOOLEAN DEFAULT TRUE", 
                               nullable = false)
   private Boolean status = Boolean.TRUE;

   // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

如果Hibernate在数据库中创建表本身,这可以正常工作.什么时候

<property name="hibernate.hbm2ddl.auto">create</property>
Run Code Online (Sandbox Code Playgroud)

要么

<property name="hibernate.hbm2ddl.auto">create-drop</property>
Run Code Online (Sandbox Code Playgroud)

但如果

  1. 我运行我的程序并允许Hibernate创建此表
  2. 然后我将值更改hibernate.hbm2ddl.auto验证
  3. 然后我用Hibernate生成的表再次运行我的程序

    <property name="hibernate.hbm2ddl.auto">validate</property>
    
    Run Code Online (Sandbox Code Playgroud)

所以我得到了例外:

org.hibernate.HibernateException:dbtest.user中列STATUS的列类型错误.发现:位,预期:BOOLEAN DEFAULT TRUE

任何想法Hibernate的这种行为的原因是什么,我该如何解决它?

我用MySQL server 5.1 …

java hibernate hibernate-mapping hibernate-annotations

5
推荐指数
1
解决办法
3439
查看次数

JPA坚持不写入数据库

我只是想了解JSF和JPA,但是每当我尝试将一个对象持久保存到数据库中时,它似乎都不会消失。这是我正在使用的代码:

@Named
@ManagedBean
@SessionScoped
public class BestemmingController implements Serializable{

@PersistenceUnit(unitName="RealDolmenTravelShopPU")
@PersistenceContext(unitName="RealDolmenTravelShopPU")

EntityManagerFactory emf = null;
public void submit(){


        try{
            emf = Persistence.createEntityManagerFactory("RealDolmenTravelShopPU");

            EntityManager em = emf.createEntityManager();

            //EntityTransaction et = em.getTransaction();
            //et.begin();

            Bestemming nieuweBestemming = new Bestemming();

            Land gezochtLand = em.find(Land.class, selectedLand);

            nieuweBestemming.setLand(gezochtLand);
            nieuweBestemming.setNaam(bestemmingNaam);

            em.persist(nieuweBestemming);

            //et.commit();
            //em.flush();
            em.close();
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            emf.close();
        }
    }
Run Code Online (Sandbox Code Playgroud)

我尝试使用EntityTransaction,但它只是停止了我的应用程序,没有任何错误或任何其他信息。所以我省略了它,但仍然没有写掉。因此,我尝试了分别调用flush,但是那也没做。我真的很困惑为什么这不起作用。这可能是一些新手的错误,但是如果有人可以帮助我,我会喜欢的。

提前致谢!

java jpa eclipselink

5
推荐指数
1
解决办法
2331
查看次数

让jackson忽略在序列化为json时初始化为懒的字段

我使用Spring并创建一个REST服务.

这是我的控制器的一部分:

@RequestMapping("/get")
public @ResponseBody Person getPerson() {
    Person person = personRepository.findOne(1L);
    //(1) person.setRoles(null);
    return person;
}
Run Code Online (Sandbox Code Playgroud)

该人的角色是懒惰的初始化,当时不需要.当(1)被注释掉时,一切都会失败

org.springframework.http.converter.HttpMessageNotWritableException:无法编写JSON:懒得初始化角色集合:no.something.project.Person.roles,无法初始化代理 - 没有会话等

我可以通过执行(1),手动将其设置为null(或其他一些值)来解决这个问题,因此当Jackson尝试序列化我的对象时它不会失败.

然而,这很烦人,必须在不同的地方做很多次.我想要一些简单的解决方案,在未初始化时忽略那些延迟的初始化字段,或者只是将它们设置为null.

注意:@JsonIgnore对象的值不是解决方案,因为在其他情况下我希望包含这些值.

spring json spring-mvc jackson

5
推荐指数
1
解决办法
9195
查看次数