Tag: 外键

使用JDBC获取所有外键

我正在使用postgreSQL。 我试图从表中获取所有外键。 这是我目前使用的方法。 public String getFKeyData(String tableName, int i) throws SQLException { DatabaseMetaData dm = connection.getMetaData(); ResultSet rs = dm.getImportedKeys(null, null, tableName); while (rs.next()) { fkTableData = rs.getString(i); } return fkTableData; } 这段代码有效,但它只能得到我最后一个外键,如果表中只有一个,但这不符合我的需要。 我在网上看到的所有例子与此非常相似,只提供一个外键作为输出。 目前我只是在按下按钮时打印数据。 System.out.println(databaseConnection.getFKeyData(tableName,3)); System.out.println(databaseConnection.getFKeyData(tableName,4)); System.out.println(databaseConnection.getFKeyData(tableName,8)); 3获取从中导入外键的表。 4获取导入的主键列的名称。 8获取外键列的名称。 如果有人可以提供帮助,我将非常感激。

使用PostgreSQL,为什么Hibernate / JPA不会创建级联约束?

我有一个实体Bar : @OneToMany(cascade = CascadeType.ALL, mappedBy = “bar”) private Set fooSet; 一个实体Foo : @ManyToOne(optional = false) @JoinColumn(name = “bar_id”) private Bar bar; Hibernate在foo.bar – > bar.id上创建外键约束,但它没有指定ON DELETE CASCADE 。 为什么不? 有没有办法实现它? 或者我可以在DB中手动添加ON DELETE CASCADE (并禁用DDL生成), 这是一个好习惯吗? 而且,我是否必须以某种方式修改我的代码以让Hibernate知道数据库会自动删除相关记录? 谢谢。 更新 – 这是我的JPA / Hibernate / PostgreSQL配置: true update 更新2 – 阐明了我的意思:创建了外键约束,但我想知道为什么它没有指定ON DELETE CASCADE (相应地更改了原始问题)

java hibernate entity:允许通过id和object本身设置相关对象

我有一个以下的Java类,它也是一个Hibernate实体: @Entity @Table(name = “category”) public class Category { @ManyToOne @JoinColumn(name=”parent_id”) private Category parent; public Category getParent() { return parent; } public void setParent(Category parent) { this.parent = parent; } 该类别表示类别树中的节点。 我正在实现一个允许CRUD类别的Web服务。 例如,接口能够创建类别树节点,并将类别id作为参数传递。 我只想创建一个新的Category对象并将其持久保存到数据库中而不需要获取父对象。 我的数据提供程序类如下所示: public void createCategory(int parent_id, String name, CategoryType type) { Category category = new Category(); category.setName(name); // category.setParent(?); <- I don't […]

JPA没有生成“on delete set null”FK限制

我有两个相关的分支JPA注释。 报警和状态。 一个警报可以有一个状态。 我需要的是能够删除一个状态并将空值“传播”到该状态中已被删除的警报。 也就是说,我需要将外键定义为“ on delete set null ”。 @Entity public class Alarm { @Id @GeneratedValue(strategy=GenerationType.SEQUENCE, generator=”sequence”) @SequenceGenerator(name=”sequence”, sequenceName=”alarm_pk_seq”) private Integer id; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name=”idStatus”) private Status status; // get/set } @Entity public class Status { @Id @Column(name=”idStatus”) private Integer id; private String description; // get/set } 例: 之前: STATUS id description 1 new 2 […]

如何通过Java在SQLite中强制执行外键约束?

看来SQLite默认不强制执行外键。 我正在使用sqlitejdbc-v056.jar并且我已经阅读了使用PRAGMA foreign_keys = ON; 将打开外键约束,并且需要在每个连接的基础上打开它。 我的问题是:我需要执行哪些Java语句来打开此命令? 我试过了: connection.createStatement().execute(“PRAGMA foreign_keys = ON”); 和 Properties properties = new Properties(); properties.setProperty(“PRAGMA foreign_keys”, “ON”); connection = DriverManager.getConnection(“jdbc:sqlite:test.db”, properties); 和 connection = DriverManager.getConnection(“jdbc:sqlite:test.db;foreign keys=true;”); 但这些都不起作用。 这里有什么我想念的吗? 我已经看到了这个答案 ,我想做同样的事情,只使用JDBC。