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);
}
}
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
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]
Was ist die Ursache des Problems?