相关疑难解决方法(0)

Hibernate @OneToOne @NotNull

在关系中声明@OneToOne@NotNull双方是否有效,例如:

class ChangeEntry
{
    @OneToOne(cascade=CascadeType.ALL)
    @NotNull
    ChangeEntryDetails changeEntryDetails;

    public void addDetails(ChangeEntryDetails details) {
       this.changeEntryDetails = details;
       details.setChangeEntry(this);
    }
 }

 class ChangeEntryDetails
 {
     @OneToOne(cascase=CascadeType.ALL)
     @NotNull
     ChangeEntry changeEntry;

     public void setChangeEntry(ChangeEntry changeEntry)
     {
          this.changeEntry = changeEntry;
     }
 }
Run Code Online (Sandbox Code Playgroud)

我找不到任何说这是无效的东西,但似乎在持久性过程中至少有一方必须违反.(例如,如果首先编写changeEntry,则changeEntryDetails将暂时为null).

尝试这个时,我看到一个异常抛出not-null property references a null or transient value.

如果可能的话,我想避免放松约束,因为双方都必须在场.

java orm hibernate jpa bean-validation

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

在@Column中对nullable = true进行Hibernate处理

我正在使用Hibernate和一个由Mysql db支持的Springs.

这是与我用来创建条目的实体类似的实体

@Entity
@Table(name = "my_table") {

    @Basic
    @Column(name = "my_string", nullable = false)
    private String myString;
}
Run Code Online (Sandbox Code Playgroud)

sql定义是

CREATE TABLE `my_table` (
 `my_string` varchar(200) DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

虽然该表允许空值,但myString列根据JPA注释是不可为空的.这导致了不可预测的行为.

问:在插入时,是否在实体级强制执行不可为空的ALWAYS?或者是否存在可能被忽略的情况

我的期望是所有参赛作品都应该被拒绝.但是通过这种设置,许多条目(> 7000)进入了表格.有时我只能从spring获得DataIntegrityViolation异常

org.springframework.dao.DataIntegrityViolationException: not-null property references a null or transient value: ...; nested exception is org.hibernate.PropertyValueException: not-null property references a null or transient value: ....
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:652)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:403)
    at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58) 
    ....  
    ....
Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: …
Run Code Online (Sandbox Code Playgroud)

java mysql orm hibernate jpa

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

在@ElementCollection上指定主键

因此,如果某些表缺少主键,那么innodb的行为可能会导致问题.

因此,对于Hibernate,我正在寻找一个键来指定@ElementCollection表上的主键,其中Set为底层数据结构.

我找到了一种使用地图的主键的方法,但它有点奇怪,因为我不需要地图.

我还找到了与@Embeddable相关的答案,但我不需要那种复杂性.我在我的实体中使用Set或Set作为数据结构.

知道如何实现吗?

java orm hibernate jpa hibernate-mapping

9
推荐指数
2
解决办法
5691
查看次数

持久性@Column nullable = false可以插入null

我想做这个列不能为null但是当我在数据库中插入一个寄存器值null时,这允许我插入.我阅读文档,我不知道为什么不起作用. @Column(name="QWECOD", nullable = false) private String qwe;

谢谢

更新:我正在使用Toplink和java org.eclipse.persistence.eclipselink:2.4.2.

java persistence jpa

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

子类getter上的@NotNull影响父类表

我有一个有关的问题javax.validation.constraints.NotNull annotation。在我的项目中,我确实有如下所示的类树:

@Inheritance(strategy = InheritanceType.JOINED)
class Ssss {
    @ManyToOne
    private Xxxx x;
    public Xxxx getXxxx() {
       return x;
    }
}

@Inheritance(strategy = InheritanceType.JOINED)
class Yyyy extends Ssss {
    @Override
    //some not important annotations
    public Xxxx getXxxx() {
        return super.getXxxx();
    }        
}

@Inheritance(strategy = InheritanceType.JOINED)
class Zzzz extends Ssss {
    @Override
    //some not important annotations
    @NotNull
    public Xxxx getXxxx() {
        return super.getXxxx();
    }
}
Run Code Online (Sandbox Code Playgroud)

这三个类作为三个表存储在数据库中。对于架构创建,我正在使用Hibernate

hibernate.hbm2ddl.auto=create
Run Code Online (Sandbox Code Playgroud)

它是一个预期的行为,Hibernate对增加NOT NULLxxxx_object_id存储在父类生成的表场SSSS类似以下内容:??

Postgres

我找不到有关休眠如何在继承的getter上使用@NotNull的任何相关信息。

有人可以帮我解决这个问题吗?
最好的祝福。 …

java postgresql hibernate jpa bean-validation

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

@Basic(可选= false) vs @Column(nullable = false) vs @NotNull

在这三个选项中,我应该使用一个或两个或全部三个选项组合来防止空值?

@NotNull
@Column(name = "SOME_VALUE", nullable = false)
@Basic(optional = false)
private String someValue;
Run Code Online (Sandbox Code Playgroud)

请注意,我不认为这与现有问题重复。我看到许多 问题都询问这三个选项的子集,但尚未找到一个询问这三个选项中哪一个适合在现代 JPA/Hibernate 堆栈中使用的问题。

validation hibernate jpa jsr

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

在单元测试中调用Spring Repository.save()时未触发Hibernate Validator

这是我的实体:

@Builder
@Data
@Entity
@Table(name = "audit_log")
public class AuditEventEntity {
    @Id
    @GeneratedValue
    private UUID id;

    private long createdEpoch;

    @NotNull
    @Size(min = 1, max = 128)
    private String label;

    @NotNull
    @Size(min = 1)
    private String description;
}
Run Code Online (Sandbox Code Playgroud)

这是我的存储库:

@Repository
public interface AuditEventRepository extends PagingAndSortingRepository<AuditEventEntity, UUID> {
}
Run Code Online (Sandbox Code Playgroud)

当我为存储库编写以下单元测试时,即使“ label”字段为null,保存也会成功!

@DataJpaTest
@RunWith(SpringRunner.class)
public class AuditRepositoryTest {
    @Test
    public void shouldHaveLabel() {
        AuditEventEntity entity = AuditEventEntity.builder()
                .createdEpoch(Instant.now().toEpochMilli())
                .description(RandomStringUtils.random(1000))
                .build();
        assertThat(entity.getLabel()).isNullOrEmpty();
        AuditEventEntity saved = repository.save(entity);
        // Entity saved and didn't get validated!
        assertThat(saved.getLabel()).isNotNull(); …
Run Code Online (Sandbox Code Playgroud)

java validation spring spring-data spring-boot

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

@NotNull 注释不会转换为模式生成中的非空约束

根据 hibernate 验证器参考文档 - 第11.1.1 节。数据库模式级验证https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-checkconstraints-db),

Hibernate ORM 开箱即用,会将您为实体定义的约束转换为映射元数据。例如,如果实体的属性被注释为 @NotNull,则其列将在 Hibernate ORM 生成的 DDL 架构中声明为非 null。

但是当我用 @NotNull 注释我的字段时,我不会自动获得架构级别约束。

我尝试设置Environment.HBM2DDL_AUTOupdatecreate但两者都无法生成数据库约束。

尽管休眠状态默认设置为hibernate.validator.apply_to_ddltrue我什至尝试手动设置 -

settings.put("hibernate.validator.apply_to_ddl", true);
Run Code Online (Sandbox Code Playgroud)

但这些选项似乎都不适合我。

我的域类

package com.praveen.domain;

import javax.persistence.Entity;
import javax.validation.constraints.NotNull;

import lombok.Data;

@Entity
@Data
public class Stakeholder extends MyPersistent {

    @NotNull
    private String clientCode;

    @NotNull
    private String gender;
}
Run Code Online (Sandbox Code Playgroud)

我的持久类

package com.praveen.domain;

import java.io.Serializable;

import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

import lombok.Getter; …
Run Code Online (Sandbox Code Playgroud)

java hibernate hibernate-validator mysql-5.5 hibernate-5.x

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

在编写实体类时使用@Basic(optional = false)

嗯,我有一个关于@Basic(可选= false)@NotNull表示法的问题.

通常,我们会在实体类中编写变量,如下所示:

模拟代码:

@Basic(optional = false)
@NotNull
@Column(name = USERNAME)
private String userName;
Run Code Online (Sandbox Code Playgroud)

上面的表示法描述了对于字段用户名,它不接受NULL值.

通常,@ Basic(可选= false)符号后跟@NotNull表示法,但是如果我想要一个字段,那么就说userID,它是一个自动增量类型,它也是主键,我应该刚写下如下代码?

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = USERID)
private Integer userID;
Run Code Online (Sandbox Code Playgroud)

或者删除@Basic(可选= false)

编辑

最新代码:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = USERID)
private Integer userID;
Run Code Online (Sandbox Code Playgroud)

还有一个问题是,只有@Basic(可选= false)@Botic(可选= false)相同,后续是@NotNull吗?

代码如下:

代码1

@Basic(optional = false)
@NotNull
@Column(name …
Run Code Online (Sandbox Code Playgroud)

java orm jpa

4
推荐指数
1
解决办法
3993
查看次数

在JPA / Hibernate中默认为@NotNull

我有几个表的MySql数据库。每个表中的每个字段都不能为空。这就是为什么我被迫对@NotNull我所有标有的Java类中的每个字段使用注释@Entity。我真的必须这样做还是有办法告诉JPA / Hibernate默认将每个字段NotNullable对待吗?

编辑:我也知道@Column(name="something", nullable=false)。但是,它仍然不能解决任何问题-您必须编写nullable=false

java hibernate jpa nhibernate-mapping

3
推荐指数
1
解决办法
9995
查看次数

注解@Column(nullable = false) vs @NotNull 区别

我读了这个。但它并没有给ma一个明确的用法回答。

当我创建表和列时。

情况1:

@Column(nullable = false, length = 14)
@NotNull
private String something;
Run Code Online (Sandbox Code Playgroud)

案例2:

@Column(length = 14)
@NotNull
private String something;
Run Code Online (Sandbox Code Playgroud)

不是一样吗?我的意思是@NotNull 会更早抛出异常,所以有理由做 nullable = false 列吗?

java spring jpa bean-validation

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