jpa
chushiyunen
这个作者很懒,什么都没留下…
展开
-
jpa 自动创建时间和更新时间@CreatedDate,@CreatedBy,@LastModifiedDate,@LastModifiedBy
@EnableJpaAuditing 表示开启审计功能。 支持在字段或者方法上进行注解 @CreateDate、@CreatedBy、@LastModifiedDate、@LastModifiedBy下面开始使用Application类加@EnableJpaAuditing表示开启审计。代码:@EnableTransactionManagement@SpringBootApplicati...原创 2020-01-05 18:22:04 · 2152 阅读 · 0 评论 -
jpa报错:mappedBy reference an unknown target entity property:
报错信息为:mappedBy reference an unknown target entity property: com.example.accessingdatamysql.entity.OrderProduct.order_id in com.example.accessingdatamysql.entity.Order.orderProducts这样的问题一般是mappedby ...原创 2020-01-05 15:18:47 · 1830 阅读 · 0 评论 -
jpa orphanRemoval = true的作用
这个注解表示是否删除孤立元素,例如映射关系是一对一,或一对多。加上这个注解,即使不设置级联关系,删除一的时候,多的一方肯定是孤立元素了。如代码: @OneToOne( mappedBy = "phone", cascade = CascadeType.ALL,// orphanRemoval = true, fetch ...原创 2020-01-05 09:55:18 · 3303 阅读 · 0 评论 -
jpa报错: More than one row with the given identifier was found:
More than one row with the given identifier was found:是因为设置的一对一的关系,但是却发现不只是一对一。原创 2020-01-05 09:42:00 · 2490 阅读 · 0 评论 -
jpa报错 HHH000142: Javassist Enhancement failed: com.zking.domain.Customer
一对多,多的一方查询的时候报这个错。 fetch方式lazy。后来发现是一的一方只有有参构造器,没有无参构造器造成的。原创 2020-01-05 09:25:30 · 272 阅读 · 0 评论 -
jpa mysql设置了级联,但是外键不生效
1、驱动是innodb, 外键才生效。 修改my.ini或my.cnf,重启mysql2、application.properties里面设置spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect3、如果实体类还配置了级联的话,那么就会生成外键。...原创 2020-01-05 06:57:35 · 775 阅读 · 0 评论 -
jpa中没有外键是否也能级联删除(myisam数据库)
虽然没有外键,但是仍然能够删除。外键和级联是两回事。设置了级联会影响sql语句,如删除detail,detail.setPhone();设置了级联会先查phone的id获取到对象,然后再删除,不设置级联,直接getId,删除就可以。...原创 2020-01-04 15:53:36 · 526 阅读 · 1 评论 -
jpa @Enumerated(EnumType.ORDINAL)处理枚举类型
PhoneType代码:public enum PhoneType { LAND_LINE, MOBILE;}Phone代码:@Data@Entity(name = "Phone")public class Phone { @Id private Long id; @Column(name = "phone_number") pr...原创 2019-12-28 15:51:13 · 2828 阅读 · 0 评论 -
jpa @Basic和@Transient
@Basic 字段是个隐藏字段,一般都不用加他。因为@Entity里面的字段默认都相当于加上@Basic了,就是要在数据库生成。但是如果有个字段不需要在数据库生成。那么加上@Transient即可....原创 2019-12-28 11:02:02 · 552 阅读 · 0 评论 -
jpa @Column来定义字段类型
columnDefinition 实在是比较万能,不好定义或者没有这个属性的直接用columnDefinition根据ddl来定义即可。代码:@Data@Entitypublic class ColumnDemo { @Id private Long id; @Column(name="name",nullable = false) // 姓名不能为null,但...原创 2019-12-28 10:50:26 · 4699 阅读 · 1 评论 -
jpa @Embeddable和@Embedded
@Embeddable表示这个类可以被嵌入,如A–》 C,C类上如果不加这个注解,使用 @Embedded嵌入到A类的时候没问题。但是如果一对多嵌入,就会报错:@ElementCollection @CollectionTable( name = "book_author", joinColumns = @JoinColumn(name ...原创 2019-12-28 09:55:19 · 1136 阅读 · 0 评论 -
jpa @Formula注解的使用
顾名思义,公式。 作用:该字段不在数据库生成,但是在查询的时候,根据公式自动计算出值。以信用卡账户为例:@Data@Entity(name = "account")public class Account { @Id private Long id; private Double credit; // 贷款 private Double ra...原创 2019-12-22 21:48:59 · 1005 阅读 · 0 评论 -
jpa @NotFound注解
作用是当不用外键关联时,可能会出现为null的情况,默认是会报错的,加上@NotFound( action = NotFoundAction.IGNORE ) 就不会报错。Person代码:@Data@ToString(exclude="phones")@Entity(name = "Person")public class Person { @Id @Generate...原创 2019-12-22 21:32:01 · 2721 阅读 · 0 评论 -
jpa面试题
jpa默认的FetchType是LAZY还是EAGERlazy么,错。 eager么,还是错。这就是这个问题的坑,因为要区分来看。onetoone默认是eagermanytoone默认eageronetomany默认是lazy...原创 2019-12-22 20:40:53 · 4080 阅读 · 0 评论 -
jpa native query和实体查询
native query本地查询List<Object[]> persons = entityManager.createNativeQuery( "SELECT * FROM Person" ) .getResultList(); for(Object[] person : perso...原创 2019-12-21 17:29:17 · 1162 阅读 · 0 评论 -
jpa CascadeType有哪些,以及用法
把刷新操作,可以从父对象传递到子对象。将放弃当前实体的状态,并使用从数据库加载的实体状态覆盖它。Person person = entityManager.find( Person.class, 1L );Phone phone = person.getPhones().get( 0 );person.setName( "John Doe Jr." );phone.setNumber(...原创 2019-12-21 15:42:38 · 1063 阅读 · 0 评论 -
jpa中的clear()
执行clear()后,会把对象分离开来。如代码:Phone phone = entityManager.find( Phone.class, 1L ); // id查personPerson person = phone.getPerson(); // person获取phoneperson.setName( "aaa" ); //person 设置namephone.setNum...原创 2019-12-21 11:28:07 · 1265 阅读 · 0 评论 -
idea编写hql报错
有说project structure— facets—添加hiberante,如图:实测无效。还有一说,editor—inspections—shu原创 2019-12-21 10:51:49 · 412 阅读 · 1 评论 -
jpa报错:Duplicate entry '321-654-0987' for key 'UK_93r5ymk2uoes3dwjfcdwj9j1g'
是因为unique字段的问题。1、字段上是否有@NaturalId,有的话去掉。2、字段上@Column注解,去掉 unique=true3、数据库删掉已经创建的unique键。原创 2019-12-21 10:29:49 · 556 阅读 · 0 评论 -
jpa报错:Removing a detached instance
报错代码为:Person person = new Person();person.setId( 1L );person.setName("John Doe");entityManager.remove( person);entityManager.flush();应该是session的问题,替换remove那一行为如下即可:entityManager.remove( enti...原创 2019-12-15 16:03:25 · 728 阅读 · 0 评论 -
jpa报错:Provided id of the wrong type for class
这个代码报错:entityManager.remove( entityManager.find(Person.class,1) );原因是id是long类型的,写为1L即可。原创 2019-12-15 16:00:56 · 2173 阅读 · 1 评论 -
jpa报错:detached entity passed to persist
常见于id不对应。笔者为例entity代码:@Id@GeneratedValue(strategy= GenerationType.AUTO)private Long id;调用代码:Person person = new Person();person.setId( 1L ); -- 主要在这一句person.setName("John Doe");entityMa...原创 2019-12-15 15:51:20 · 1511 阅读 · 0 评论 -
对象关系jpa百问
多对多为什么不要级联删除如person和address(如街道)删掉张三,张三在长安街。但是李四也在长安街,当然不能级联删除了。所以一般来说PERSIST和:@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})private List<Address> addresses = new ArrayLis...原创 2019-12-15 11:04:53 · 69 阅读 · 0 评论 -
@OneToMany和@ManyToOne要素
cascadefecthmappedby 或者joinColumnorphanRemovecascade一的一方一般用: cascade = CascadeType.ALL多的一方不用设置,默认不级联fetch默认是lazy还是eager啊mappedby 或者joinColumn一的一方用mappedby多的一方用joinColumnorphanRemove一的一方用这...原创 2019-12-15 10:49:12 · 463 阅读 · 0 评论 -
jpa中的帮助方法,一般用在双向关联中
例如一对多双向关联中:@OneToMany(mappedBy = "person", cascade = CascadeType.ALL, orphanRemoval = true)private List<Phone> phones = new ArrayList<>();//Getters and setters are omitted for brevity...原创 2019-12-14 22:22:09 · 111 阅读 · 1 评论 -
jpa 多对多为什么不要级联删除
如person和address(如街道)删掉张三,张三在长安街。但是李四也在长安街,当然不能级联删除了。所以一般来说PERSIST和MERGE级联就可以了:@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})private List<Address> addresses = new ArrayList&...原创 2019-12-14 22:11:43 · 1098 阅读 · 1 评论 -
为什么要用双向关联
无效,因为@OneToOne自带unique约束。父端并不知道子端是否重复,所以会去查所有子元素。这涉及到了n+1的问题(感觉1+n更妥当)那么OneToOne就一定不能懒加载么,不是的,可以通过@LazyToOne( LazyToOneOption.NO_PROXY ) 来实现,代码:@OneToOne( mappedBy = "phone", cascade = CascadeT...原创 2019-12-14 22:08:54 · 388 阅读 · 0 评论 -
为什么要用mappedby
性能会提升。如一对多中,person对phone,会生成一张中间表person_phone我有139,156,159,187的号码.现在要删除187的号码。过程大致如下:delete from person_phone where id =1;insert 139 into person_phone;insert 156 into person_phone;insert 159 int...原创 2019-12-14 21:48:32 · 146 阅读 · 0 评论 -
hibernate有哪些基本的类型(BasicTypes)
官网地址:https://docs.jboss.org/hibernate/orm/current/userguide/html_single/Hibernate_User_Guide.html#basic-provided原创 2019-12-14 10:19:34 · 255 阅读 · 0 评论 -
jpa设计树菜单的探讨
children和parentIds的优缺点:children,在看一个menu的所有一级子节点的时候非常方便。语句为:where parent_id =? 即可但是如果节点要迁移,就不方便,因为子节点还有子节点。需要先层层遍历。其实感觉children并不是数据库需要的字段,而是一个VO需要的字段。parentIds:找所有字节点比较方便。语句为:where parent_i...原创 2019-10-31 22:50:19 · 284 阅读 · 1 评论 -
jpa保存对象后如何获取自增的id
这个官方早就想到了,save方法会返回一个对象,调用这个对象的getId()方法即可。Product product = new Product();product.setName("mobile");product.setDelFlag("0");Product result = productRepository.save(product);System.out.println(re...原创 2019-10-31 18:00:14 · 5406 阅读 · 0 评论 -
jpa使用@Where注解来实现统一加条件
JpaRepository已经封装好了许多方法,例如:findAll,但是实际中我们往往要加入一些条件,例如del_flag= 0 ,难道要改JpaRepository的源码么,当然不:在实体类中使用@Where即可。@Entity@Where(clause="del_Flag = 0 ")public class Category {}那么打印的sql为:可以发现自动加上查询条...原创 2019-10-31 09:29:53 · 10040 阅读 · 0 评论 -
springboot集成jpa打印sql
在application.properties中添加:spring.jpa.show-sql=truespring.jpa.properties.hibernate.format_sql=truespring.jpa.properties.hibernate.format_sql=true 是格式化,如果不加这句,sql输出为一行,不好看。...原创 2019-10-31 07:22:16 · 3754 阅读 · 0 评论 -
jpa设计树菜单演化(二)
java代码:@Entitypublic class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; private Integer level; private...原创 2019-10-30 17:07:36 · 286 阅读 · 0 评论 -
jpa设计树菜单演化(一)
java代码:@Entitypublic class Category { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; /** * 名称 */ private String name; /** * 关键...原创 2019-10-30 16:37:05 · 554 阅读 · 0 评论 -
jpa生成delFlag字段的设计
delFlag很常用,但是如何设计比较好:@Column(nullable = false,length = 1,columnDefinition="char(1) NOT NULL DEFAULT '0'")private Character delFlag;生成如图:如果要用String,也是可以的。@Column(nullable = false,length = 1,colu...原创 2019-10-30 15:57:00 · 1362 阅读 · 0 评论 -
jpa中PageRequest @Deprecated和Sort @Deprecated的最新使用方法
这是对比图片:new PageRequest由 PageRequest.of替代new Sort由 Sort.by 替代以下是上面截图的代码:@Test public void now() { List<Sort.Order> orders = new ArrayList<>(); orders.add(new Sort.Order(Sort.Dire...原创 2019-10-25 16:51:17 · 564 阅读 · 0 评论 -
Jpa save的时候,null值不进行更新的实现方案(通过反射)
一说是实体类添加注解:@Entity@DynamicInsert(true) // true 是默认值,写不写一样 @DynamicUpdate(true) // true 是默认值,写不写一样 实测,并没有效果。最终实现方法,通过反射自己来写一个方法:student类的代码:@Entity@DynamicInsert(true) // true 是默认值,写不写一样 ...原创 2019-10-25 16:14:50 · 2599 阅读 · 0 评论 -
经典的一对一关联关系,一对多关联关系有哪些
夫妻关系,一对一人和身份证号,一对一用户和手机号 一对多爸爸和儿子 一对多班级和学生 一对多学校和学生 一对多部门和员工 一对多订单和网单 一对多...原创 2019-10-24 21:12:35 · 3453 阅读 · 0 评论 -
jpa注解实现 一对多,不进行外键关联
一个father对应多个sonFather类代码如下:@Entitypublic class Father { @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer id; @Column private String name; @OneToMany(mappedBy = "fathe...原创 2019-10-24 21:05:52 · 3090 阅读 · 1 评论