NULL NICHT für die Spalte 'ID' im Winterschlaf erlaubtJava

Java-Forum
Anonymous
 NULL NICHT für die Spalte 'ID' im Winterschlaf erlaubt

Post by Anonymous »

Ich erstelle integrative Tests für meine Dao -Objekte. Ich bin nicht Diene Spring Framework . Dies ist das Modell: < /p>

Code: Select all

import lombok.AccessLevel;
import lombok.Data;
import lombok.Setter;

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

@Entity
@Table(name = "pets")
@Data
public class Pet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Setter(AccessLevel.NONE)
private Long id;

@Column
private String name;

@Column
@Enumerated(EnumType.STRING)
private Breed breed;

@Column
@Enumerated(EnumType.STRING)
private FurColor color;

@ManyToOne
@JoinColumn(name = "owner_id")
private Owner owner;

@ManyToMany
@JoinTable(
name = "pet_friends",
joinColumns = @JoinColumn(name = "pet_id"),
inverseJoinColumns = @JoinColumn(name = "friend_id")
)
@Setter(AccessLevel.NONE)
private List  friends = new ArrayList();

public void AddFriend(Pet friend) {
friends.add(friend);
}
}
Ich versuche, die Basistests mit JUNIT 5 und dbunit erstellt mit Maven zu erstellen.

Code: Select all


org.hibernate
hibernate-core
5.5.7.Final



org.projectlombok
lombok
1.18.36
provided



com.h2database
h2
2.2.224
test



org.dbunit
dbunit
2.7.3
test



org.junit.jupiter
junit-jupiter-engine
5.9.1
test


< /code>
Dies ist die DAO-Speichermethode: < /p>
@Override
public Pet save(Pet entity) {
var session = hib.openSession();
var transaction = session.beginTransaction();

try {
session.save(entity);
transaction.commit();
} catch (Exception e) {
transaction.rollback();
}

session.close();
return entity;
}
< /code>
Dies ist der DAO-Test: < /p>
@TestInstance(TestInstance.Lifecycle.PER_METHOD)
public class PetDaoTests {
private SessionFactory sessionFactory;
private PetDao petDao;
private DataSource dataSource;

@BeforeEach
public void setUp() {
var config = new Configuration().configure("test.hibernate.cfg.xml");
sessionFactory = config.buildSessionFactory();
petDao = new PetDao(sessionFactory);

var jdbch2 = new JdbcDataSource();
jdbch2.setUrl(config.getProperty("hibernate.connection.url"));
jdbch2.setUser(config.getProperty("hibernate.connection.username"));
jdbch2.setPassword(config.getProperty("hibernate.connection.password"));
dataSource = jdbch2;
}

@AfterEach
public void tearDown() {
sessionFactory.close();
}

@Test
public void checlconn() {
var p = new Pet();
p.setName("some");
petDao.save(p);
System.out.println(p);

var session = sessionFactory.openSession();
var pets = session.createQuery("from Pet", Pet.class).list();
Assertions.assertEquals(1, pets.size());
}
}
< /code>
Hibernate-Konfiguration: < /PBR /> 



org.h2.Driver
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
sa
sa

org.hibernate.dialect.H2Dialect
true
true
create
thread






Ich weiß, dass die Verwendung aller Instrumente von dbunit mit jungit 5 möglicherweise nicht funktioniert

Code: Select all

ERROR: Значение NULL не разрешено для поля "ID"
NULL not allowed for column "ID"; SQL statement:
insert into pets (id, breed, color, name, owner_id) values (null, ?, ?, ?, ?) [23502-224]
Gleich nach dem Einfügen - aber wie ich denke, dass die Verpflichtung der Transaktion die Sitzung spülen muss und die Änderungen sichtbar sein müssen. 4 mit dbunit , hatte aber den gleichen Fehler
Was ist die Ursache des Problems?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post