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)
请注意,ID和DEPT列选择两次.
@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) 数据库表已成功创建
<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放在每个项目的类路径中,但没有区别.
Hibernate中是否有一些工具可用于查询查询的查询计划?我可以查看源代码并跟踪连接和急切的提取,并希望我不会错过任何,或者我可以查看SQL日志并尝试将SQL语句与其源匹配,但我想知道是否存在是一种更快的方式.例如,我可以想象一个显示相关类的对象图或带有某种测序符号的ER图.
我有一个带有投影和转换器的 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)
有人可以指导我解决问题吗
如何调试使用JPA 2.0 CriteriaBuilder?构建的查询?有没有办法打印出正在执行的查询?
我使用的开发Web应用程序NetBeans,MySql,GlassFish.我会避免在调试模式下启动MySql,因为它也用于其他应用程序.JPA提供商是EclipseLink.
我有这门课
@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)
这是正确的方法吗?这两个公式的逻辑完全不同.
我有以下实体类:
@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异常:
错误的列类型.发现:位,预期: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)
但如果
hibernate.hbm2ddl.auto为验证 然后我用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 …
我只是想了解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,但是那也没做。我真的很困惑为什么这不起作用。这可能是一些新手的错误,但是如果有人可以帮助我,我会喜欢的。
提前致谢!
我使用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对象的值不是解决方案,因为在其他情况下我希望包含这些值.
hibernate ×7
java ×4
eclipselink ×2
jpa ×2
orm ×2
criteria-api ×1
eclipse ×1
formula ×1
jackson ×1
json ×1
mysql ×1
performance ×1
spring ×1
spring-mvc ×1