Tag: jpa

什么是@JoinColumn以及如何在Hibernate中使用它

我一直在阅读很多关于@JoinColumn的内容,但我仍然不了解它背后的想法。 病人表 CREATE TABLE patient ( patient_id BIGINT NOT NULL, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, PRIMARY KEY(patient_id)); 车辆表 CREATE TABLE vehicles ( patient_id BIGINT NOT NULL, vehicle_id BIGINT NOT NULL, vehicle_manufacturer VARCHAR(255), PRIMARY KEY (vehicle_id), CONSTRAINT patienthasmanyvehicle FOREIGN KEY(patient_id) REFERENCES patient(patient_id)); 患者类 @OneToMany(mappedBy = “patient”) private Collection patientVehicles = new ArrayList(); 车辆类 […]

使用抽象超类作为Spring数据存储库的参数

我知道spring数据存储库的实现: 创建一个这样的界面: public interface CountryRepository extends CrudRepository {} 现在Country是一个AbstractCatalog目录,我在矿山项目中有很多(很多)目录。 我想知道我是否可以创建一个适用于所有目录的存储库: public interface AbstractCatalogRepository extends CrudRepository {} 现在有了保存,我没有直接看到问题,但如果我想搜索一个AbstractCatalog我已经确定我会碰壁,因为回购不会知道他必须选择什么对象。 AbstractCatalog.class @MappedSuperclass public abstract class AbstractCatalog extends PersistentEntity { /** * The Constant serialVersionUID. */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; /** * The code. */ @Column(unique = true, nullable […]

JPA为每个项目选择最新实例

假设我有一个会议实体。 每次会议都有一位与会者和一个会面日期。 在我的会议表中,每个与会者可能会有多个会议,每个会议的日期各不相同。 我需要一个JPA查询,它只会为所有与会者选择最新的会议。 例如,如果我的表看起来像这样 Meeting ID | Attendee ID | Meeting Date 1 | 1 | 6/1/2011 2 | 2 | 6/1/2011 3 | 1 | 6/6/2011 4 | 3 | 6/6/2011 我的结果应该是 Meeting ID | Attendee ID | Meeting Date 2 | 2 | 6/1/2011 3 | 1 | 6/6/2011 4 | 3 […]

使用序列时,Hibernate会生成负的id值

我有一个具有以下定义的类: @Id @SequenceGenerator(name = “SEQ_ACE_WORKERS_QUEUE_STATS_ID”, sequenceName = “SEQ_ACE_WORKERS_QUEUE_STATS_ID”, allocationSize = 500) @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “SEQ_ACE_WORKERS_QUEUE_STATS_ID”) @Column(name = “ID”) private long Id; 当我们在Jboss 4.2.3上运行它时它工作正常并生成了正确的ID(从1000+开始) 现在我们转到jboss 7.1.1并生成负ID! (从-498开始上升) 知道为什么会这样吗?

Spring JPA和persistence.xml

我正在尝试设置一个Spring JPA Hibernate简单示例WAR来部署到Glassfish。 我看到一些示例使用persistence.xml文件,而其他示例则没有。 一些示例使用dataSource,而另一些示例则不使用。 到目前为止,我的理解是,如果我有以下情况,则不需要dataSource: org.hibernate.ejb.HibernatePersistence com.coe.jpa.StudentProfile 我可以部署好,但是我的EntityManager没有被Spring注入。 我的applicationContext.xml: 我的EntityManager类: public class StudentService { private String saveMessage; private String showModal; private String modalHeader; private StudentProfile studentProfile; private String lastName; private String firstName; @PersistenceContext(unitName=”educationPU”) private EntityManager em; @Transactional public String save() { System.out.println(“*** em: ” + this.em); //em is null this.studentProfile= new StudentProfile(); this.saveMessage = […]

使用jpa和hibernate在orm.xml中定义命名查询

我正在尝试将我的命名查询放在我的orm.xml中(使用persistence.xml放入META-INF)但是我的orm.xml似乎被hibernate / jpa忽略了。 当我尝试使用em.createNamedQuery(“myQuery”)创建我的命名查询时,它返回它无法找到此查询。 我使用注释,我想在orm.xml中外化我的命名查询(仅限于此)。 这是我的persistence.xml: META-INF/orm.xml com.mysite.Account 这是我的orm.xml com.mysite 我做错了什么? 为什么我的orm.xml被忽略了? 谢谢

在使用Spring和Hibernate时是否需要persistence.xml?

我正在使用Spring JPA和Hibernate的项目。 persistence.xml中的大多数内容都可以在Spring applicationContext.xml文件中指定。 那么persistence.xml是否需要了? 谢谢。

保存双向ManyToMany

我有两个以下列方式注释的实体类 @Entity class A { @ManyToMany(mappedBy=”A”, cascade=CascadeType.ALL) private List b; .. } @Entity class B { @ManyToMany(cascade=CascadeType.ALL) private List a; .. } 如果我存储类’B’的实例,则关系存储在数据库中,类’A’中的getter将返回B的正确子集。 但是,如果我更改“A”中的B列表,更改不会存储在数据库中? 我的问题是,我怎样才能使这两个类中的变化“级联”到另一个类? 编辑:我尝试了删除mappedBy参数和定义JoinTable(和列)的不同变体,但我一直无法找到正确的组合。

如何使用Join定义JPA存储库查询

我想使用带有注释@Query的Jpa存储库进行Join查询。 我有两张桌子: table user with iduser,user_name 和: table area with idarea, area_name and iduser 原生查询是: SELECT u.user_name FROM user as u INNER JOIN area as a ON a.iduser = u.iduser WHERE a.idarea = 4 现在我有一个表Hibernate实体用户和区域 所以我尝试使用UserRespository @Query(SELECT u.userName FROM User u INNER JOIN Area a ON a.idUser = u.idUser WHERE a.idArea = :idArea) List findByIdarea(@Param(“idArea”) […]

远程病例中的Lazy / Eager加载策略(JPA)

我遇到了像大多数尝试使用ORM进行远程处理的人一样的LazyLoadingexception。 在大多数情况下,切换到急切的提取解决了问题(延迟加载/非primefaces查询/线程安全/ n + 1问题……)。 但是如果你正在处理一个非常大的对象图,那么渴望获取也会有缺点。 在大多数用例中不需要加载整个对象图。 加载需要的更多数据(或从db加载它们并提取所需的子集)感觉很糟糕。 那么有什么替代方法可以解决这类问题(在运行时)? 我见过: 将数据访问依赖项注入域对象,并让对象决定加载延迟或急切: 感觉不好 ! 域层应独立于任何服务。 域注入也是一项昂贵的操作。 域应该是无知的数据访问,应该使用或不使用数据访问。 除了需要更多数据的用例之外,获取所有惰性内容:看起来效果更好但这种方式会强制许多客户端=>服务器/数据库往返。 懒惰字段的初始化也会遭受痛苦(尝试使用JPA)。 这种方式不具有通用性 ,并且受到上述相同的惰性限制。 在Lazy类中封装持久性:更复杂,没有与ORM互操作的最佳实践。 膨胀的服务层(这么多“手写”代码感觉很糟糕 )。 对每个用例使用完整的预测:我们将最终使用SQL并放弃ORM的好处。 DTO /虚拟代理层强制执行更多复杂性并使代码更难维护(Wormhole antipattern >> Bloat)。 我想了很多其他的方式。 也许通用投影white./black listning是一个解决方案。 Idea(黑名单):使用提取操作的边界定义类名列表。 如果属性匹配并且它是惰性的,则删除惰性(CGLIB)代理并使用null填充该值。 否则,简单地防止获取(并将值保留为null)。 因此,我们可以在DAO中设置明确的界限。 示例: ProductDao.findByName(“Soap”,Boundaries.BLACKLIST,”Category, Discount”)最后两个参数也可以绑定到Boundaries对象中。 Idea(白名单):与黑名单一样,但您必须声明属性应加载到白名单中。 你怎么看待这样的解决方案? (可能的问题,限制,优点……)我应该如何在java中编写这个? 也许通过AOP匹配DAO方法(因为我能够修改cglib代理行为)?